Как проигнорировать комментарии при чтении XML-файла в XmlDocument? [дубликат]

Попробуйте использовать Системные свойства:

java -Dvariable=value -jar my.jar

Это либо работает из коробки, либо вам нужно указать контексту приложения, чтобы он смотрел на свойства системы, когда она расширяет переменные. Прошло много времени с тех пор, как я это попробовал.

Хорошей отправной точкой является PropertySourcesPlaceholderConfigurer.

24
задан Patrick Hofman 8 April 2016 в 12:28
поделиться

6 ответов

Вы можете использовать XmlReader с XmlReaderSettings.IgnoreComments , установленным в true:

XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.IgnoreComments = true;
using (XmlReader reader = XmlReader.Create("input.xml", readerSettings))
{
    XmlDocument myData = new XmlDocument();
    myData.Load(reader);
    // etc...
}

(найдено из здесь по поиск XmlDocument ignore comments )

40
ответ дан 28 November 2019 в 22:29
поделиться
foreach(XmlNode node in nodeList)
  if(node.NodeType != XmlNodeType.Comment)
     ...
18
ответ дан 28 November 2019 в 22:29
поделиться

Вы можете просто добавить фильтр на ваши ChildNodes. Например,

var children = myNode.ChildNodes.Cast<XmlNode>().Where(n => n.NodeType != XmlNodeType.Comment);

Кроме того, вы можете загрузить XmlDocument, передаваемый в XmlReader, с такими настройками, что XmlReaderSettings.IgnoreComments имеет значение true.

using (var file = File.OpenRead("datafile.xml"))
{
    var settings = new XmlReaderSettings() { IgnoreComments = true, IgnoreWhitespace = true };
    using (var xmlReader = XmlReader.Create(file, settings))
    {
        var document = new XmlDocument();
        document.Load(xmlReader);

        // Process document nodes...
    }
}
5
ответ дан 28 November 2019 в 22:29
поделиться

использовать XmlReaderSettings

XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.IgnoreComments = true;
XmlReader reader = XmlReader.Create(sourceFilePath, readerSettings);
XmlDocument myXmlDoc = new XmlDocument();
myXmlDoc.Load(reader);
4
ответ дан 28 November 2019 в 22:29
поделиться
Dim pattern As String = String.Empty
Dim xDoc As XmlDocument = New XmlDocument()

xDoc.Load(path)

''Pattern of comments
pattern = "(<!--.*?--\>)"
xDoc.InnerXml = Regex.Replace(xDoc.InnerXml, pattern, String.Empty, RegexOptions.Singleline)

<!--aftr this run ur code-->
2
ответ дан 28 November 2019 в 22:29
поделиться

Если вы хотите использовать XmlDocument вместо XmlReader, вам лучше обратиться к дочерним узлам по имени или с помощью XPath.

Тогда вам не нужно беспокоиться о комментариях, которые были добавлены, или о других узлах, или об изменении порядка.

XmlDocument myData = new XmlDocument();
myData.Load("datafile.xml");

XmlNode DocNode = myData.DocumentElement;

XmlNode Child = DocNode ["SomeChildNode"];

При этом будет выбран «SomeChildNode», дочерний элемент корневого элемента.

Следующий пример перебирает все книги в books.xml и печатает автора. Он использует селектор свойства строки и Xpath. Это не должно быть затронуто комментариями и т. Д.

XmlDocument myData = new XmlDocument();
myData.Load("books.xml");

XmlNode DocNode = myData.DocumentElement;

XmlNodeList BookNodeList = DocNode.SelectNodes("./book");

foreach (XmlNode Book in BookNodeList)
{
    Console.WriteLine(Book["author"].InnerText);
}

Обратите внимание, что с XPath вы можете так же легко искать все элементы книги в документе, используя что-то вроде ".//book".

books.xml:

<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
   <book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
   </book>
<catalog>

Ссылки:

Свойство XmlNode.Item (String) hxxp: //msdn.microsoft.com/en-us/library/sss31aas.aspx Метод XmlNode.SelectNodes (String) http://msdn.microsoft.com/en-us/library/hcebdtae.aspx Метод XmlNode.SelectSingleNode (String) http://msdn.microsoft. ком / EN-US / библиотека / fb63z0tw.aspx

2
ответ дан 28 November 2019 в 22:29
поделиться
Другие вопросы по тегам:

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