如何获取子元素的集合 - 使用 Xdocument 查询 returns null
How can i get a collection of child elements - query returns null using Xdocument
任何人都可以告诉我为什么当我试图获取元素/属性时此 Xdocument 查询返回 null。
我正在尝试获取 <version>
元素的集合,以便我可以读取它们的属性。例子 XML:
<dmodule>
<idstatus>
<dmaddres>
<dmc>Some DMC</dmc>
<dmtitle><techname>My techname</techname><infoname>My infoname</infoname></dmtitle>
<issno issno="004" type="revised">
<issdate year="2016" month="11" day="30"></dmaddres>
<status>
<security class="2">
<rpc>RPC1</rpc>
<orig>ORIG1</orig>
<applic>
<model model="2093">
**<version version="BASE"></version>
<version version="RNWB"></version>**</model></applic>
<techstd>
<autandtp>
<authblk></authblk>
<tpbase>-</tpbase></autandtp>
<authex></authex>
<notes></notes></techstd>
<qa>
<firstver type="tabtop"></qa></status>
</idstatus>
<dmodule>
这就是我尝试获取 <version>
元素的方式:
XDocument doc = XDocument.Load(sgmlReader);
List<string> applicabilityList = null;
//this doesn't work
//var applics = doc.XPathSelectElements("dmodule/idstatus/status/applic/model/version");
//nor does this
var applics = doc.Descendants("idstatus").Descendants("applic").Elements("version");
foreach (var applic in applics)
{
string applicVersion = applic.Attribute("version").ToString();
applicabilityList.Add(applicVersion);
}
return applicabilityList;
以上任一查询returns无结果。清除了我查询中的一个愚蠢错误,但我没有练习。
那是因为您缺少 model
元素。
...
<applic>
<model model="2093">
<version version="BASE"></
...
如果您只对 version
元素感兴趣,您可以简单地执行以下操作:
var versions = doc.Descendants("version");
这是工作代码
var applics = doc.Descendants("dmodule")
.Descendants("idstatus")
.Descendants("status")
.Descendants("security")
.Descendants("applic")
.Descendants("model")
.Elements("version");
任何人都可以告诉我为什么当我试图获取元素/属性时此 Xdocument 查询返回 null。
我正在尝试获取 <version>
元素的集合,以便我可以读取它们的属性。例子 XML:
<dmodule>
<idstatus>
<dmaddres>
<dmc>Some DMC</dmc>
<dmtitle><techname>My techname</techname><infoname>My infoname</infoname></dmtitle>
<issno issno="004" type="revised">
<issdate year="2016" month="11" day="30"></dmaddres>
<status>
<security class="2">
<rpc>RPC1</rpc>
<orig>ORIG1</orig>
<applic>
<model model="2093">
**<version version="BASE"></version>
<version version="RNWB"></version>**</model></applic>
<techstd>
<autandtp>
<authblk></authblk>
<tpbase>-</tpbase></autandtp>
<authex></authex>
<notes></notes></techstd>
<qa>
<firstver type="tabtop"></qa></status>
</idstatus>
<dmodule>
这就是我尝试获取 <version>
元素的方式:
XDocument doc = XDocument.Load(sgmlReader);
List<string> applicabilityList = null;
//this doesn't work
//var applics = doc.XPathSelectElements("dmodule/idstatus/status/applic/model/version");
//nor does this
var applics = doc.Descendants("idstatus").Descendants("applic").Elements("version");
foreach (var applic in applics)
{
string applicVersion = applic.Attribute("version").ToString();
applicabilityList.Add(applicVersion);
}
return applicabilityList;
以上任一查询returns无结果。清除了我查询中的一个愚蠢错误,但我没有练习。
那是因为您缺少 model
元素。
...
<applic>
<model model="2093">
<version version="BASE"></
...
如果您只对 version
元素感兴趣,您可以简单地执行以下操作:
var versions = doc.Descendants("version");
这是工作代码
var applics = doc.Descendants("dmodule")
.Descendants("idstatus")
.Descendants("status")
.Descendants("security")
.Descendants("applic")
.Descendants("model")
.Elements("version");