C# 使用XDocument解析XML
我可以使用XDocument从以下xml解析“my_cool_id”吗C# 使用XDocument解析XML,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我可以使用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> <
<?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>
12345
12345
12345
12345
我怀疑你被名称空间难住了。试试这个:
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
}
你试过什么?你尝试的预期结果是什么?什么东西没有按预期工作?当您想要解析它时,您希望结果是什么?Xpath:
//field[@name='my_cool\u id']/value/text()
@MarcB:由于名称空间的原因,我认为这不会按原样工作。