2015-08-26 6 views
3

У меня есть короткий вопрос, я хотел бы получить тип значения «SomeType» из XML-структуры, как это:Получить значение XML из 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); 
} 

Что-то не так?

+0

Установили ли вы брейк-пойнт на строкового типа = х [ «Type»] InnerText; и проверил, какие у него свойства? – Matt

+0

Да, это значение null, но XPath прав –

+1

Нет, XPath не прав - он не использует правильные пространства имен. Лично я бы использовал LINQ to XML, что делает это тривиальным, но вы можете сделать это с помощью XPath, если вы действительно хотите ... –

ответ

2

Как и другие, 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; 
+0

Это работает, спасибо! –

+0

http://stackoverflow.com/questions/32242175/get-resutls-from-xml-with-more-than-one-line Не могли бы вы это проверить? –

Смежные вопросы