2016-11-05 3 views
0

Мой XML выглядит следующим образом. Я хочу получить «NGSPkgTrackingId» Мне нужно пройти Node-> Node-> Attribute. мне нужна помощьКак искать Узел-> Узел-> Применить с помощью XmlDocument

<TrackingID>{06EB4234-8A65-4C28-AD45-DAC87B972437}</TrackingID> 
<Documents> 
    <Details Weight="1.7950" ZIP="04011" ZIPPlus4="3103" > 
     <Identifier Qualifier="eVSBarcode" Value="4200401192458927004050120118829995" /> 
     <Identifier Qualifier="REFERENCENUM" Value="301113159600798" /> 
     <Identifier Qualifier="NGSPkgTrackingId" Value="00983482428"> 
    </Details> 
    <Details Weight="3.3450" ZIP="04011" CountryCode="US" > 
     < Identifier Qualifier="eVSBarcode" Value="4200401192612927004646230017808858" /> 
     <Identifier Qualifier="REFERENCENUM" Value="117913788" /> Default="true" /> 
    </Details> 

Спасибо

+0

Вы можете использовать 'SelectSingleNode()' проходящее подходящий параметр выражения XPath, чтобы получить определенную часть XML через 'XmlDocument'. Что вы пробовали и в чем проблема? – har07

+0

Возможный дубликат [Поиск XML-файла для узлов с определенным значением атрибута в .NET 2] (http://stackoverflow.com/questions/14501038/search-xml-file-for-nodes-with-specific-attribute-value-value- in-net-2) – ethorn10

ответ

1

Попробуйте посмотреть вверх msdn documentation on XmlDocument. Как указал har07, вы можете использовать SelectSingleNode(). Который вы можете ссылаться на here.

Что касается того, что код может выглядеть следующим образом, если вы просто хотите, чтобы найти значение, связанное с данным идентификатором Qualifier, она могла бы работать так:

public static string FindValue(string qualifier, string xml) 
    { 
     var value = string.Empty; 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(xml); 

     XmlNode root = doc.DocumentElement; 

     XmlNode identifier = root.SelectSingleNode(@"descendant::Details/Identifier [@Qualifier='" + qualifier +"']"); 

     value = identifier.Attributes["Value"].Value; 

     return value; 
    } 

Мы должны делать нулевые контрольные проверки, так Я добавлю их в

public static string FindValue(string qualifier, string xml) 
    { 
     var value = string.Empty; 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(xml); 

     XmlNode identifier = null; 
     XmlNode root = doc.DocumentElement; 

     if (root != null) 
      identifier = root.SelectSingleNode(@"descendant::Details/Identifier [@Qualifier='" + qualifier +"']"); 

     if (identifier?.Attributes != null) value = identifier.Attributes["Value"].Value; 

     return value; 
    } 
1

Если у вас есть правильный XML, как этот

<?xml version="1.0" encoding="utf-8" ?> 
<Documents> 
    <Details Weight="1.7950" ZIP="04011" ZIPPlus4="3103" > 
     <Identifier Qualifier="eVSBarcode" Value="4200401192458927004050120118829995" /> 
     <Identifier Qualifier="REFERENCENUM" Value="301113159600798" /> 
     <Identifier Qualifier="NGSPkgTrackingId" Value="00983482428"/> 
    </Details> 
    <Details Weight="3.3450" ZIP="04011" CountryCode="US"> 
     <Identifier Qualifier="eVSBarcode" Value="4200401192612927004646230017808858" /> 
     <Identifier Qualifier="REFERENCENUM" Value="117913788" /> Default="true" /> 
    </Details> 
</Documents> 

Доступ значение «NGSPkgTrackingId» должно быть довольно просто, используя приведенный ниже код

  XmlDocument xmlDoc = new XmlDocument(); 
      XmlReader reader = XmlReader.Create("C:/Users/.../documents.xml "); 
      xmlDoc.Load(reader); 
      XmlNodeList nodeList = xmlDoc.SelectNodes("/Documents").Item(0).ChildNodes; 
      string val = xmlDoc.DocumentElement.ChildNodes[0].LastChild.Attributes.Item(0).Value; 
      Console.WriteLine(val); 

В качестве альтернативы, вы можете использовать SelectNodes

 var node2 =xmlDoc.DocumentElement.SelectNodes(".//Details/Identifier"); 
     var ans1= node2.Item(2).Attributes["Qualifier"].Value; 
     Console.WriteLine(ans1); 

Третий вариант

  var value= xmlDoc.DocumentElement.SelectSingleNode("descendant::Details").LastChild.Attributes["Qualifier"].Value; 
      Console.WriteLine(value); 
+0

Спасибо всем ... NGSTrackingID не может находиться в одном месте, и я повторяю все узлы «Подробности», а затем атрибуты дочерних узлов «Подробности». –

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