我正在使用特定的FundsXML-Schema尝试获取特定XML文件的所有Assets
以进行迭代。
xml-file的简短示例:
<?xml version="1.0" encoding="utf-8"?>
<FundsXML xmlns="http://www.fundsxml.org/XMLSchema/3.0.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="3.0.5" xsi:schemaLocation="http://www.fundsxml.org/XMLSchema/3.0.5 FundsXML3.0.5.xsd">
<Date>2015-02-27</Date>
...
<AssetMasterData>
<Asset>
<SecurityCodes>
<ISIN>XXXXXXXXXXXX</ISIN>
</SecurityCodes>
</Asset>
...
<Asset>
</AssetMasterData>
</FundsXML>
我想在那里迭代Asset
。我试过了:
XDocument xmlTree = XDocument.Load(xmlPath);
XElement root = xmlTree.Root;
foreach (XElement f in root.Descendants())
{
System.Windows.MessageBox.Show(f.Name.ToString() +" ; "+f.Value.ToString());
}
输出:{http://www.fundsxml.org/XMLSchema/3.0.5}日期; 2015年2月27日
第二部分是读取每个Asset
节点的ISIN。
但我没有时间这样做,因为我在第一部分失败了。
编辑:
解决方案是搜索命名空间+名称:
foreach (XElement f in root.Descendants("{http://www.fundsxml.org/XMLSchema/3.0.5}Asset"))
我认为最佳解决方案:
foreach (XElement f in root.Descendants(xmlTree.Root.GetDefaultNamespace()+"Asset"))
答案 0 :(得分:0)
根据您提供的示例数据
<Asset></Asset>
似乎没有任何数据。你需要得到
foreach (XElement f in root.Descendants("ISIN"))
无论如何我想。如果没有实际文本,那么你会得到一个空白或空值?所以听起来它回归了你要求的东西?
答案 1 :(得分:0)
由于您的XML位于命名空间中,您需要将命名空间信息添加到Descendants查询中。
您可以看到示例here
您可以尝试获取
roots.Descendants()
不过滤并检查它返回的节点以确认这一点。