gpt4 book ai didi

c# - LINQ to XML - Elements() 有效但 Element(Name) 无效

转载 作者:可可西里 更新时间:2023-11-01 08:15:22 25 4
gpt4 key购买 nike

下面是我的xml:

<?xml version="1.0" encoding="utf-8"?>
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition">
<Body>
<ReportItems>
<Textbox Name="txtCurrentDate">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>=Today()</Value>
<Style>
<FontWeight>Medium</FontWeight>
<Format>d</Format>
</Style>
</TextRun>
</TextRuns>
<Style>
<TextAlign>Left</TextAlign>
</Style>
</Paragraph>
</Paragraphs>
<Left>0.36958in</Left>
<Height>0.22917in</Height>
<Width>1in</Width>
<Style>
<Border>
<Style>None</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
<Textbox Name="txtName">
<CanGrow>true</CanGrow>
<KeepTogether>true</KeepTogether>
<Paragraphs>
<Paragraph>
<TextRuns>
<TextRun>
<Value>Mark Wilkinson</Value>
<Style />
</TextRun>
</TextRuns>
<Style />
</Paragraph>
</Paragraphs>
<Top>0.22917in</Top>
<Left>0.36958in</Left>
<Height>0.20833in</Height>
<Width>3.22917in</Width>
<ZIndex>1</ZIndex>
<Style>
<Border>
<Style>None</Style>
</Border>
<PaddingLeft>2pt</PaddingLeft>
<PaddingRight>2pt</PaddingRight>
<PaddingTop>2pt</PaddingTop>
<PaddingBottom>2pt</PaddingBottom>
</Style>
</Textbox>
</ReportItems>
<Height>6.01667in</Height>
<Style />
</Body>
<Width>7.92333in</Width>
</Report>

我想获取所有文本框 的名称和值。这是我尝试过的方法,但它不起作用:

XDocument data = XDocument.Load("..\\..\\testxml.rdl");

var elements = from c in data.Elements("ReportItems")
select c;
foreach (var element in elements)
{
Console.WriteLine("Element : " + element.Attribute("Name").Value);

}
Console.ReadKey();

但是当我将查询更改为这样的内容时

var elements = from c in data.Elements().Elements().ElementAt(0).Elements().ElementAt(0).Elements()
select c;

有效。

非常感谢这方面的任何帮助。

编辑:在答案的帮助下,我得到了想要的结果。非常感谢:)

XDocument data = XDocument.Load("..\\..\\testxml.rdl");            
XNamespace ns = data.Root.Name.Namespace;
var elements = from c in data.Descendants(ns + "Textbox")
select c;
foreach (var element in elements)
{
Console.WriteLine("Element : " + element.Attribute("Name").Value);
}
Console.ReadKey();

TIA。

拉贾

最佳答案

您需要考虑命名空间:

XNamespace df = data.Root.Name.Namespace;

然后使用df + "foo" 在根元素上定义的命名空间中选择具有本地名称foo 的元素。

正如已经提到的,您可能想要选择后代元素,而不是子元素:

        var elements = from c in data.Descendants(df + "Textbox")
select c;

关于c# - LINQ to XML - Elements() 有效但 Element(Name) 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6214420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com