0

私はC#を使用しています。XML 形式の Web ページがあります (ただし、実際の URL には形式が表示されません)。

例:

..../api/rest/v1/items/ZPA

ページの一部(気になる部分はこんな感じ):

<Identifiers>
<Identifier name="v" value="zzzz"/>
<Identifier name="id" value="29382bb53cc73af32153276fe0a6cd6c"/>
<Identifier name="qn" value="wyz-zz1"/>
<Identifier name="index" value="1111"/>
<Identifier name="item" value="ZPA"/>
</Identifiers>

これを Web から読み取り、「id」値を取得する必要があります。どうすればこれを行うことができますか?この場合の id 値は「zzzz」です。それを取得して変数に格納する必要があります。

4

4 に答える 4

2
XElement rootElement = XElement.Load(<url here>);
string targetValue =
  (string)rootElement.Elements("Identifier")
  .Single(e => (string)e.Attribute("name") == "v")
  .Attribute("value");

これは、識別子ノードの 1 つを名前でターゲットできるようにしたいこと、およびその名前を持つ要素が存在することが確実であることを前提としています。そうでない場合、そのノードが見つからない場合、.Single 呼び出しは例外をスローします。

資格情報を使用する必要があり、WebClient を使用したい場合は、次を使用できます。それは「働く」)

string uri = "> url here! <";
System.Net.WebClient wc = new System.Net.WebClient();
StreamReader sr = new StreamReader(wc.OpenRead(uri));
string xml = sr.ReadToEnd();
XElement rootElement = XElement.Parse(xml);
string targetValue =
  (string)rootElement.Elements("Identifier")
  .Single(e => (string)e.Attribute("name") == "v")
  .Attribute("value");
于 2012-08-08T16:55:55.540 に答える
0
            XDocument document = XDocument.Load("http://Myserver.tld/api/rest/v1/items/ZPA");

            var idElement = document.Descendants("Identifiers").Elements("Identifier").Where(element => element.Attribute("name").Value == "id").FirstOrDefault();
            string idValue = idElement != null ? idElement.Attribute("value").Value : null;
于 2012-08-08T17:03:33.163 に答える
0

あなたが言うように、資格情報にWebClientを使用する必要があるのを見てください(他の返信によると):

using (WebClient client = new WebClient())
{
    // Set credentials...   
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(client.DownloadString("<YOUR_URL>"));
    // Select the Identifier node with a 'name' attribute having an 'id' value
    var node = doc.DocumentElement.SelectSingleNode("//Identifier[@name='id']");
    if (node != null && node.Attributes["value"] != null)
    {
        // Pick out the 'value' attribute's value
        var val = node.Attributes["value"].Value;
        // ...
    }
}

「従来の」.NET XML は、LINQ to XML よりも理解しやすいと思いますが、YMMV.

于 2012-08-08T17:32:14.720 に答える
0

オフハンドで、xml 自体を取得する方法の正確な状況はわかりませんが、xml を取得したら、次のようにして解析できます。

        XmlDocument xDoc = new XmlDocument();
        string xmlstring = "<get the xml string somehow>";
        xDoc.LoadXml(xmlstring);
        //or
        xDoc.Load("filepath");
        XmlNode xnode = xDoc.SelectSingleNode("//Identifier[@name='v']");
        string value = xnode.Attributes["value"].Value;
于 2012-08-08T16:45:21.513 に答える