Синтаксический анализ XML с использованием XDocument

#c# #xml #linq-to-xml

#c# #xml #linq-to-xml

Вопрос:

Могу ли я получить некоторую помощь в анализе «my_cool_id» из следующего xml с использованием XDocument?

 <?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
  <fields>
    <field name="field_name_1">
      <value>12345</value>
    </field>
    <field name="my_cool_id">
      <value>12345</value>
    </field>
    <field name="field_name_2">
      <value>12345</value>
    </field>
    <field name="field_name_3">
      <value>12345</value>
    </field>
  </fields>
</xfdf>
  

Ответ №1:

Я подозреваю, что пространство имен ставит вас в тупик. Попробуйте это:

 XDocument doc = XDocument.Load("test.xml");
XNamespace ns = "http://ns.adobe.com/xfdf/";

foreach (XElement element in doc.Root
                                .Element(ns   "fields")
                                .Elements(ns   "field"))
{
    Console.WriteLine("Name: {0}; Value: {1}",
                      (string) element.Attribute("name"),
                      (string) element.Element(ns   "value"));
}
  

Или найти только один конкретный элемент:

 XDocument doc = XDocument.Load("test.xml");
XNamespace ns = "http://ns.adobe.com/xfdf/";
var field = doc.Descendants(ns   "field")
               .Where(x => (string) x.Attribute("name") == "my_cool_id")
               .FirstOrDefault();

if (field != null)
{
    string value = (string) field.Element("value");
    // Use value here
}