【发布时间】:2015-08-26 14:28:57
【问题描述】:
我有一个简短的问题,我想获取类型值“someType” 来自这样的 XML 结构:
<?xml version="1.0" encoding="utf-8"?>
<UniversalInterchange xmlns="http://www.cargowise.com/Schemas/Universal/2011/11" version="1.1">
<Header>
</Header>
<Body>
<UniversalShipment xmlns="http://www.cargowise.com/Schemas/Universal/2011/11" version="1.1">
<Shipment>
<DataContext>
<DataTargetCollection>
<DataTarget>
<Type>someType</Type>
</DataTarget>
</DataTargetCollection>
</DataContext>
<FileType>
<SecondType>not this type</SecondType>
</FileType>
</Shipment>
</UniversalShipment>
</Body>
</UniversalInterchange>
我尝试了更多可能的解决方案,但没有给我类型
XmlDocument xml = new XmlDocument();
xml.LoadXml(myXmlString);
XmlNodeList xnList = xml.SelectNodes("/UniversalInterchange/Body/UniversalShipment/Shipment/DataContext/DataTargetCollection/DataTarget");
foreach (XmlNode xn in xnList)
{
string type = xn["Type"].InnerText;
Console.WriteLine("Name: {0} {1}", type);
}
怎么了?
【问题讨论】:
-
你是否在 string type = xn["Type"].InnerText;并检查它有什么属性?
-
是的,它是 null 但 XPath 是正确的
-
不,XPath 不正确——它没有使用正确的命名空间。就我个人而言,我会使用 LINQ to XML,这使这变得微不足道,但如果你真的想要的话,你可以用 XPath 来做......
-
对于@StuartSmith 的观点,您需要use the XmlNameSpaceManger
-
我想用最新的方法(LINQ?)解决它,但我不知道如何用 LINQ 解决这个问题