2017-02-14 18 views
0

私は、次のXMLがあります。私が何をしようとしています何XML、特定の値を取得

<XML> 
    <Properties> 
    <Property name="ActionLogPrompt">2</Property> 
    <Property name="Answer"></Property> 
    <Property name="SubQBackColour">#FF0000</Property> 
    </Properties> 
</XML> 

はSubQBackColourを見つけて、「#1 FF0000」の値を取得することです。私は下のコードでそれをしようとしていますが、私はプロパティの名前を取得し、このSubQBackColourをチェックするために何を呼び出すかを理解することはできません。

while (reader.Read()) 
{ 
    node = reader.NodeType; 

    if (node == XmlNodeType.Element) 
    { 
     if (reader.Name.Equals("XML")) 
     { 
      reader.Read(); 

      if (reader.Name.Equals("Properties")) 
      { 
       reader.Read(); 

       if (reader.Name.Equals("Property")) 
       { 
        reader.Read(); 
        node = reader.NodeType; 

        if ((node == XmlNodeType.Text)) 
        { 
         string thingy = reader.GetAttribute("name"); 
        } 
       } 
      } 
     } 
    } 
} 
+0

このコードを試すことができますか? – A3006

+0

<プロパティ名= "ActionLogPrompt"> 2<プロパティ名= "回答"><プロパティ名= "SubQBackColour">理由のいくつかの種類のための#1 FF0000

+0

はないというのが私のxmlラインのうち奇妙なこと –

答えて

0

あなたが "SubQBackColour" と "名前" 属性の値を取得します

string sXML = "<XML>"+ 
         "<Properties>"+ 
          "<Property name=\"ActionLogPrompt\">2</Property>"+ 
          "<Property name=\"Answer\"></Property>"+ 
          "<Property name=\"SubQBackColour\">#FF0000</Property>"+ 
         "</Properties></XML>"; 

     XDocument doc3 = XDocument.Parse(sXML); 
     var v= from p in doc3.Descendants("Property") 
         where p.Value == "#FF0000" 
          select p.Attribute("name").Value; 

     Console.WriteLine(v); 

...これを試してみてください。必要なものを得るためにクエリを変更することができます。

プロパティ名と値を保持するクラスを作成し、出力として取得するのが最適な実装です。

public class Property 
{ 
    public string Name { get; set; } 
    public string Value { get; set; } 
} 

string sXML = "<XML>"+ 
         "<Properties>"+ 
          "<Property name=\"ActionLogPrompt\">2</Property>"+ 
          "<Property name=\"Answer\"></Property>"+ 
          "<Property name=\"SubQBackColour\">#FF0000</Property>"+ 
         "</Properties></XML>"; 

     XDocument doc3 = XDocument.Parse(sXML); 
     var v4 = from p in doc3.Descendants("Property") 
       where p.Value == "#FF0000" 
       select new Property 
       { 
        Name = p.Attribute("name").Value, 
        Value = p.Value 
       }; 

     Console.WriteLine(v4.FirstOrDefault().Name); 
+0

ありがとうございます:) –

0

ような何かあなたはどこにXMLがある

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("c:\\yourxml.xml"); 
XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("/Properties"); 
string actionLogPrompt= "", answer= "", subQBackColour=""; 
foreach (XmlNode node in nodeList) 
{ 
actionLogPrompt = node.SelectSingleNode("ActionLogPrompt").InnerText; 
answer = node.SelectSingleNode("Answer").InnerText; 
subQBackColour= node.SelectSingleNode("SubQBackColour").InnerText; 
MessageBox.Show(actionLogPrompt+ " " + answer+ " " + subQBackColour); 
} 
+0

これは、私に次のエラーが表示されます: 'XmlNodeList'には 'public'が含まれていないため、 'XmlNodeList' 'GetEnumerator'の定義です。私は修正のためのGoogleにしようとしているが、実際にそれを行う方法を把握することはできません。 –

+0

最近、 'XmlDocument' APIの使用を避けることができます。 LINQ to XMLはかなり洗練されています。 –

関連する問題