0

我正在使用 C#。我有一个 XML 格式的网页(尽管您在实际 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>

我需要从网上阅读这个,并获取“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");

这假设您希望能够按名称定位标识符节点之一,并且您确定会有一个具有该名称的元素。如果不是这样,则 .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

顺便说一句,我不知道你如何获取 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 回答
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 回答