【问题标题】:Parsing XML using XDocument使用 XDocument 解析 XML
【发布时间】:2011-10-17 19:58:27
【问题描述】:

在使用 XDocument 解析以下 xml 中的“my_cool_id”时,我可以获得一些帮助吗?

<?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>

【问题讨论】:

  • 你试过什么?您尝试的预期结果是什么?什么没有按预期工作?当你想解析它时,你希望结果是什么?
  • Xpath: //field[@name='my_cool_id']/value/text()
  • @MarcB:由于命名空间,我认为这不会按原样工作。

标签: c# xml linq-to-xml


【解决方案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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多