我正在使用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”。我需要抓住它并将其存储在变量中。
答案 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。