我有一个像这样的xml文件
<Program xmlns="CBOpenIFSchema3_0">
<Variables/>
<CodeBlocks>
<CodeBlock Name="Code1">
<Code>
Sample code 1
</Code>
</CodeBlock>
<CodeBlock Name="Code2">
<Code>
Sample code 2
</Code>
</CodeBlock>
<CodeBlock Name="Code3">
<Code>
Sample code 3
</Code>
</CodeBlock>
</CodeBlocks>
</Program>
从这个xml我需要获取每个代码块的名称和与之对应的代码。如何使用XElement完成此操作?我尝试使用以下内容。
XElement xDoc = XElement.Load("test.xml");
IEnumerable<XElement> codeBlocks = xDoc.Descendants("CodeBlocks").Elements();
foreach (var c in codeBlocks)
Console.WriteLine(c.Attribute("Name").Value);
codeBlocks
正在显示"Enumeration yielded no results"
。
编辑:xmlns="CBOpenIFSchema3_0"
会解决问题。
答案 0 :(得分:3)
您的文档使用默认的XML命名空间,因此您必须在查询中使用一个:
var xDoc = XDocument.Load("source.txt");
var ns = XNamespace.Get("CBOpenIFSchema3_0");
var codeBlocks = xDoc.Root.Element(ns + "CodeBlocks").Elements(ns + "CodeBlock");
foreach (var c in codeBlocks)
Console.WriteLine((string)c.Attribute("Name"));
我还对您的代码进行了一些更改:
XDocument
加载XML文档XAttribute.Value
属性Descendants
method unless your XML contains tree-like structure