【问题标题】:Get XML value from xml file从 xml 文件中获取 XML 值
【发布时间】: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 解决这个问题

标签: c# xml


【解决方案1】:

正如其他人所建议的那样,XDocument 是要走的路。还涉及一个命名空间,这意味着您需要执行以下操作:

var xDoc = XDocument.Parse(xmlString);

XNamespace ns = "http://www.cargowise.com/Schemas/Universal/2011/11";

var value = xDoc
    .Element(ns + "UniversalInterchange")
    .Element(ns + "Body")
    .Element(ns + "UniversalShipment")
    .Element(ns + "Shipment")
    .Element(ns + "DataContext")
    .Element(ns + "DataTargetCollection")
    .Element(ns + "DataTarget")
    .Element(ns + "Type")
    .Value;

【讨论】:

猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多