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
можно перечислить (т. е. перечислить ).
Это не важно, но желательно. Однако, если обработка строк работает на Вас, затем пойдите для нее! Существует много случаев, где маленький или простой текст XML может быть безопасно создан вручную.
Просто знайте, что создание, текст XML более тверд, чем оно, смотрит. Вот некоторые критерии, которые я рассмотрел бы:
Чем меньше контроля Вы имеете на исходных данных, тем более вероятно Вы испытаете затруднения и более выгодное, библиотека становится. Например: (a) Можно ли гарантировать, что имена элементов никогда не будут иметь символа, который является запрещенным на имя? (b) Как насчет кавычек в содержании атрибута? Они могут произойти, и Вы обрабатываете их? (c) Делает данные, когда-либо содержат что-либо, что, возможно, должно было бы быть закодировано как объект (как меньше, который часто должен производиться как <); Вы делаете его правильно?
Вы, вероятно, не хотите застревать с кодом для жизни. Я работал с подержанным кодом C++ это ручные сборки XML, и это может быть удивительно неясно. Конечно, если это - персональный ваш проект, то Вы не должны волноваться о "других": займите место "через год" "других" выше.
Я не волновался бы о производительности. Если Ваш XML достаточно прост, что можно написать от руки его, любые издержки из библиотеки, вероятно, бессмысленны. Конечно, Ваш случай мог бы отличаться, но необходимо иметь размеры для доказательства его сначала.
Наконец, Да; можно вручить сборке текст XML вручную, если это достаточно просто; но знание доступных библиотек является, вероятно, не правильной причиной.
Современная библиотека XML является довольно мощным инструментом, но это может также быть пугающим. Однако изучение основ Вашей библиотеки XML не состоит в том, что трудно, и это может быть довольно удобно; среди прочего это - почти необходимое на сегодняшнем рынке задания. Просто не увязайте пространствами имен, схемами и другими более необычными функциями, пока Вы не получите основы.
Удачи.
Я думаю, что управление пользовательской строкой прекрасно, но необходимо иметь в виду две вещи:
Я знаю кодовую базу, которая использует управление пользовательской строкой для вывода xml (и сторонняя библиотека для входа). Это было прекрасно для начала, но стало реальной стычкой через некоторое время.
Xml тверд. Парсинг себя является плохой идеей, это - даже худшая идея генерировать содержание самих. Взгляните на спецификацию Xml 1.1.
Необходимо иметь дело с такими вещами, как надлежащее кодирование, кодирование атрибута (например, производит недопустимый xml), надлежащий выход CDATA, кодирование UTF, пользовательские объекты DTD, и это, не добавляя соединение xml пространства имен со значением по умолчанию / пустое пространство имен, атрибуты пространства имен, и т.д.
Изучите инструментарий, существует много доступное.
Да, пользуйтесь библиотекой.
Кто-то не торопился и усилие создать что-то, что обычно лучше, чем, что Вы могли придумать. Обработка строк для передачи обратно единственного узла, но после того как Вы начинаете должными быть управлять DOM или используете запрос XPath, библиотека сохранит Вас.
Не пользуясь библиотекой, Вы рискуете генерировать или анализировать данные, которые не правильно построены, который рано или поздно произойдет. По той же причине document.write
не позволяется в XHTML, Вы не должны писать свою разметку XML как строку.
Да.
Нет смысла пропускать необходимый инструмент: даже написание xml нетривиально с необходимостью избегайте этих амперсандов и lts, не говоря уже о привязках пространства имен (при необходимости). И, в конце концов, библиотеки в целом могут читать и писать xml не только более надежно, но и более эффективно (особенно для Java).
Но вы, возможно, искали неправильные инструменты, если они кажутся слишком сложными. Привязка данных с использованием JAXB или XStream проста; но для простого прямого вывода XML я использую StaxMate . На самом деле это может упростить задачу многими способами (автоматически закрывает начальные теги, записывает объявления пространства имен, если нужно и т. Д.).
Нет - Если можно проанализировать его сами (как Вы делаете), и это масштабируется для Ваших потребностей, Вам не нужна никакая библиотека.
Просто удостоверьтесь, что Ваши будущие потребности будут встреченными - комплекс xml создание лучше сделан, пользуясь библиотеками - некоторые из которых прибывают в очень простые разновидности также.
Нет - специально для генерации (анализирующий я был бы менее склонен как ввести текст, может всегда удивлять Вас). Я думаю, что его штраф - но быть готовым сместиться в библиотеку должен Вы проводить более затем несколько минут, поддерживая Ваш собственный код.
Вы не должны пользоваться библиотекой, чтобы проанализировать XML, но проверить этот вопрос
Какие соображения должны быть сделаны перед изобретением велосипед?
прежде чем Вы начнете писать свой собственный код для парсинга/генерации xml.
Единственное время я сделал что-то вроде этого в производственном коде, было, когда коллега и я создали препроцессор так, чтобы мы могли встроить фрагменты XML из других файлов в больший XML. На загрузке мы сначала проанализировали бы, они встраивают (ссылки на файл в строки XML-комментария) и заменяют их фактическим фрагментом, на который они сослались. Затем мы передали бы объединенный результат Синтаксическому анализатору XML.
Я не думаю, что использование 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;
}