Действительно ли важно, чтобы я пользовался библиотеками для управления XML?

IEnumerable<Person> people = new IEnumerable<Person>();

Недопустимо. IEnumerable является интерфейсом , он не может быть создан.

Вторые действительны:

List<Person> people = new List<Person>();
IEnumerable<Person> people = new List<Person>();

Второй пример в приведенном выше примере - это просто литье коллекции в IEnumerable<Person>. Это означает, что функция List предоставляет недоступную , если вы не вернете коллекцию в список. Короче говоря, это не очень полезно. Кастинг на IEnumerable полезен при определении метода как такового:

void DoSomethingWithPeople(IEnumerable<Person> people)
{
    foreach(var person in people)
        Console.WriteLine(person.Name);
} 

Здесь нам все равно, является ли коллекция списком, набором, связанным списком и т. Д. Все мы забота о том, что people можно перечислить (т. е. перечислить ).

11
задан bluish 14 March 2011 в 16:32
поделиться

11 ответов

Это не важно, но желательно. Однако, если обработка строк работает на Вас, затем пойдите для нее! Существует много случаев, где маленький или простой текст XML может быть безопасно создан вручную.

Просто знайте, что создание, текст XML более тверд, чем оно, смотрит. Вот некоторые критерии, которые я рассмотрел бы:

  • Во-первых: сколько контроля Вы имеете на информации, которая входит в xml?

Чем меньше контроля Вы имеете на исходных данных, тем более вероятно Вы испытаете затруднения и более выгодное, библиотека становится. Например: (a) Можно ли гарантировать, что имена элементов никогда не будут иметь символа, который является запрещенным на имя? (b) Как насчет кавычек в содержании атрибута? Они могут произойти, и Вы обрабатываете их? (c) Делает данные, когда-либо содержат что-либо, что, возможно, должно было бы быть закодировано как объект (как меньше, который часто должен производиться как &lt;); Вы делаете его правильно?

  • Во-вторых, пригодность для обслуживания: код, который создает легкое XML для понимания кем-то еще?

Вы, вероятно, не хотите застревать с кодом для жизни. Я работал с подержанным кодом C++ это ручные сборки XML, и это может быть удивительно неясно. Конечно, если это - персональный ваш проект, то Вы не должны волноваться о "других": займите место "через год" "других" выше.

Я не волновался бы о производительности. Если Ваш XML достаточно прост, что можно написать от руки его, любые издержки из библиотеки, вероятно, бессмысленны. Конечно, Ваш случай мог бы отличаться, но необходимо иметь размеры для доказательства его сначала.

Наконец, Да; можно вручить сборке текст XML вручную, если это достаточно просто; но знание доступных библиотек является, вероятно, не правильной причиной.

Современная библиотека XML является довольно мощным инструментом, но это может также быть пугающим. Однако изучение основ Вашей библиотеки XML не состоит в том, что трудно, и это может быть довольно удобно; среди прочего это - почти необходимое на сегодняшнем рынке задания. Просто не увязайте пространствами имен, схемами и другими более необычными функциями, пока Вы не получите основы.

Удачи.

11
ответ дан 3 December 2019 в 02:53
поделиться

Я думаю, что управление пользовательской строкой прекрасно, но необходимо иметь в виду две вещи:

  1. Ваш код не является столь же сформировавшимся как библиотека. Выделите время в своем плане обработать ошибки то всплывающее окно.
  2. Ваш подход, вероятно, не масштабируется, а также сторонняя библиотека, когда xml начнет расти (и с точки зрения производительности и с точки зрения простоты использования).

Я знаю кодовую базу, которая использует управление пользовательской строкой для вывода xml (и сторонняя библиотека для входа). Это было прекрасно для начала, но стало реальной стычкой через некоторое время.

3
ответ дан 3 December 2019 в 02:53
поделиться

Xml тверд. Парсинг себя является плохой идеей, это - даже худшая идея генерировать содержание самих. Взгляните на спецификацию Xml 1.1.

Необходимо иметь дело с такими вещами, как надлежащее кодирование, кодирование атрибута (например, производит недопустимый xml), надлежащий выход CDATA, кодирование UTF, пользовательские объекты DTD, и это, не добавляя соединение xml пространства имен со значением по умолчанию / пустое пространство имен, атрибуты пространства имен, и т.д.

Изучите инструментарий, существует много доступное.

7
ответ дан 3 December 2019 в 02:53
поделиться

Да, пользуйтесь библиотекой.

Кто-то не торопился и усилие создать что-то, что обычно лучше, чем, что Вы могли придумать. Обработка строк для передачи обратно единственного узла, но после того как Вы начинаете должными быть управлять DOM или используете запрос XPath, библиотека сохранит Вас.

2
ответ дан 3 December 2019 в 02:53
поделиться

Не пользуясь библиотекой, Вы рискуете генерировать или анализировать данные, которые не правильно построены, который рано или поздно произойдет. По той же причине document.write не позволяется в XHTML, Вы не должны писать свою разметку XML как строку.

2
ответ дан 3 December 2019 в 02:53
поделиться

Да.

Нет смысла пропускать необходимый инструмент: даже написание xml нетривиально с необходимостью избегайте этих амперсандов и lts, ​​не говоря уже о привязках пространства имен (при необходимости). И, в конце концов, библиотеки в целом могут читать и писать xml не только более надежно, но и более эффективно (особенно для Java).

Но вы, возможно, искали неправильные инструменты, если они кажутся слишком сложными. Привязка данных с использованием JAXB или XStream проста; но для простого прямого вывода XML я использую StaxMate . На самом деле это может упростить задачу многими способами (автоматически закрывает начальные теги, записывает объявления пространства имен, если нужно и т. Д.).

2
ответ дан 3 December 2019 в 02:53
поделиться

Нет - Если можно проанализировать его сами (как Вы делаете), и это масштабируется для Ваших потребностей, Вам не нужна никакая библиотека.

Просто удостоверьтесь, что Ваши будущие потребности будут встреченными - комплекс xml создание лучше сделан, пользуясь библиотеками - некоторые из которых прибывают в очень простые разновидности также.

1
ответ дан 3 December 2019 в 02:53
поделиться

Нет - специально для генерации (анализирующий я был бы менее склонен как ввести текст, может всегда удивлять Вас). Я думаю, что его штраф - но быть готовым сместиться в библиотеку должен Вы проводить более затем несколько минут, поддерживая Ваш собственный код.

0
ответ дан 3 December 2019 в 02:53
поделиться

Вы не должны пользоваться библиотекой, чтобы проанализировать XML, но проверить этот вопрос
Какие соображения должны быть сделаны перед изобретением велосипед?
прежде чем Вы начнете писать свой собственный код для парсинга/генерации xml.

1
ответ дан 3 December 2019 в 02:53
поделиться

Единственное время я сделал что-то вроде этого в производственном коде, было, когда коллега и я создали препроцессор так, чтобы мы могли встроить фрагменты XML из других файлов в больший XML. На загрузке мы сначала проанализировали бы, они встраивают (ссылки на файл в строки XML-комментария) и заменяют их фактическим фрагментом, на который они сослались. Затем мы передали бы объединенный результат Синтаксическому анализатору XML.

1
ответ дан 3 December 2019 в 02:53
поделиться

Я не думаю, что использование API DOM XML, который идет с JDK, является трудным, это легко создать узлы Элемента, атрибуты, и т.д.... и позже является легкими строками преобразования к документу DOM sor DOM документы в Строку

На первой странице Google находит из Испании (испанский пример XML):

public String DOM2String(Document doc)
{
    TransformerFactory transformerFactory =TransformerFactory.newInstance();
    Transformer transformer = null;
    try{
        transformer = transformerFactory.newTransformer();
    }catch (javax.xml.transform.TransformerConfigurationException error){
        coderror=123;
        msgerror=error.getMessage();
        return null;
    }

    Source source = new DOMSource(doc);

    StringWriter writer = new StringWriter();
    Result result = new StreamResult(writer);
    try{
        transformer.transform(source,result);
    }catch (javax.xml.transform.TransformerException error){
        coderror=123;
        msgerror=error.getMessage();
        return null;
    }

    String s = writer.toString();
    return s;
}

public Document string2DOM(String s)
{
    Document tmpX=null;
    DocumentBuilder builder = null;
    try{
        builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    }catch(javax.xml.parsers.ParserConfigurationException error){
        coderror=10;
        msgerror="Error crando factory String2DOM "+error.getMessage();
        return null;
    }
    try{
        tmpX=builder.parse(new ByteArrayInputStream(s.getBytes()));
    }catch(org.xml.sax.SAXException error){
        coderror=10;
        msgerror="Error parseo SAX String2DOM "+error.getMessage();
        return null;
    }catch(IOException error){
        coderror=10;
        msgerror="Error generando Bytes String2DOM "+error.getMessage();
        return null;
    }
    return tmpX;
}
0
ответ дан 3 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: