如何从Web xml文档中读取特定标记值

时间:2012-08-08 16:38:37

标签: c# xml web

我正在使用C#。我有一个XML格式的网页(虽然你没有在实际的URL中看到格式)。

示例:

... / API /休息/ V1 /项目/ 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 个答案:

答案 0 :(得分: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");

答案 1 :(得分: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;

答案 2 :(得分: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;

答案 3 :(得分: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。