为什么我无法读取 XML
本文关键字:读取 XML 为什么 | 更新日期: 2023-09-27 17:56:51
可能的重复项:
为什么XDocument不能从这个格式良好的XML文本中获取元素?
我正在尝试使用 linq 到 xml 读取 xml,我想我理解错了。这是xml的开始(它很长,所以我不会全部发布)
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<Body>
<ReportItems>
<Tablix Name="Tablix12">
......
......
</Tablix>
这个 xml 可能有一些"Tablix"元素,并且可能有 1 个或没有,对于其中的每一个,我想阅读这个标签中的内容,但我很难开始。
我已经尝试了几种方法来获取"Tablix"元素或任何其他元素。在此代码中,我只得到"var 根"的结果,其余的总是 null,我不明白我做错了什么。
public ReadTablixResponse ReadTablixAdvanced(string rdl)
{
XDocument xml = XDocument.Parse(rdl);
var root = xml.Root;
var Body = xml.Root.Element("Body");
var report = xml.Root.Element("Report");
var aa = xml.Element("Report");
var bb = xml.Element("Body");
var test = xml.Elements("Tablix");
我注意到的一件事是,您使用了方法Element("name")
. 它将始终尝试使用指定的 XName 重新运行第一个(按文档顺序)直接子元素。 这就是你得到空的原因。
如果你想返回更深的元素(从你寻找的地方)。 您需要使用 Descendants("name") 方法,该方法将返回所有 Descendants 元素的集合。 无论它们有多深(相对于您选择的锚点)......
例如:
XNamespace xNameSpace = "http://schemas.micro.....";
// ...
var tablixes= xml.Descendants(xNameSpace + "Tablix");
然后你可以通过:
foreach (var tablix in tablixes)
{
var name=(string)tablix.Attribute("Name");
var age=(int)tablix.Element("age");
...
}
XDocument xDocument = XDocument.Parse(rdl);
XNamespace xNameSpace = "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition";
var tablixes= from o in xDocument.Descendants(xNameSpace + "Tablix")
select o.Value;