Question

Je dispose de plusieurs tables de codes au bas du document XML que je suis en train de traiter et je voudrais rechercher un code qui vient de la partie supérieure du XML et obtenir le codetext d'une table au fond du XML.

Voici deux des CodeTables:

<CodeTable Name="Codes - Days of Week">
  <CodeText CodeValue="" /> 
  <CodeText CodeValue="1">SUNDAY</CodeText> 
  <CodeText CodeValue="2">MONDAY</CodeText> 
  <CodeText CodeValue="3">TUESDAY</CodeText> 
  <CodeText CodeValue="4">WEDNESDAY</CodeText> 
  <CodeText CodeValue="5">THURSDAY</CodeText> 
  <CodeText CodeValue="6">FRIDAY</CodeText> 
  <CodeText CodeValue="7">SATURDAY</CodeText> 
</CodeTable>
<CodeTable Name="Codes - Bus Type">
  <CodeText CodeValue="" /> 
  <CodeText CodeValue="0">NOT A BUS</CodeText> 
  <CodeText CodeValue="1">SCHOOL (PUBLIC OR PRIVATE)</CodeText> 
  <CodeText CodeValue="2">TRANSIT</CodeText> 
  <CodeText CodeValue="3">INTERCITY</CodeText> 
  <CodeText CodeValue="4">CHARTER</CodeText> 
  <CodeText CodeValue="5">OTHER</CodeText>
</CodeTable>

Je suis en mesure d'utiliser les lignes de code ci-dessous pour se rendre à la table de code:

string CodeTableName = "Codes - Days of Week";
XmlNode CodeTableNode = doc.SelectSingleNode("//CodeTable[@Name=\"" + Convert.ToString(CodeTableName) + "\"]");

Et j'ai été en mesure d'utiliser ce qui suit pour obtenir le codetext pour le type de bus = 0:

XmlNode CodeTextNode = doc.SelectSingleNode("//CodeText[@CodeValue=\"" + Convert.ToString(BusCode) + "\"]");
code_text = CodeTextNode.InnerText;
Console.WriteLine(code_text);    

Ce que je voudrais être en mesure de faire est de mettre ces deux ensemble en quelque sorte? Je peux donc aller à la table des codes que j'ai besoin puis tirer le codetext correct sur la base CodeValue.

Était-ce utile?

La solution

Si vous utilisez LinqToXml vous pouvez faire ce qui suit:

using System.Linq;
using System.Xml.Linq;

// [...]
var codeKey = "0";
var name = "Codes - Bus Type";

var doc = XDocument.Load("bla");
var code = doc.Descendants().Where(
        d => d.Name == "CodeText" &&
        d.Parent.Attribute("Name").Value == name &&
        d.Attribute("CodeValue").Value == codeKey).FirstOrDefault().Value;

Dans le code productif je voudrais vous assurer que vous vérifiez d'abord pour null avant le dernier appel .Value. Mais sinon, cela devrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top