Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XElement获取属性值_C#_Linq To Xml - Fatal编程技术网

C# 使用XElement获取属性值

C# 使用XElement获取属性值,c#,linq-to-xml,C#,Linq To Xml,我有一个这样的xml文件 <Program xmlns="CBOpenIFSchema3_0"> <Variables/> <CodeBlocks> <CodeBlock Name="Code1"> <Code> Sample code 1 </Code> </CodeBlock>

我有一个这样的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);
XElement xDoc=XElement.Load(“test.xml”);
IEnumerable codeBlocks=xDoc.subjects(“codeBlocks”).Elements();
foreach(代码块中的变量c)
Console.WriteLine(c.Attribute(“Name”).Value);
代码块
显示的是
“枚举未产生任何结果”


编辑:
xmlns=“CBOpenIFSchema3\u 0”
给出了问题所在。

您的文档使用默认的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
    property

这是您在
test.XML
中读取的XML吗?你的代码对我来说运行良好me@Sreeja再试一次。看起来还可以。只需检查您的程序应该使用的test.xml文件。并检查项目输出目录。很抱歉,复制粘贴xml时出错。编辑了它。你能告诉我为什么在XElement和XDocument都很好的情况下建议使用XDocument吗?这是最佳实践吗?XML是文档吗?所以,请使用设计用于处理文档的类。当您使用
XDocument
时,会有额外的XML验证。很少需要XDocument,在大多数情况下,作为根目录的XElement可以正常工作。您可以使用
var ns=xDoc.GetDefaultNameSapce()