gpt4 book ai didi

c# - C#获取XML子节点

转载 作者:数据小太阳 更新时间:2023-10-29 02:24:12 27 4
gpt4 key购买 nike

这是我第一次尝试使用 C# 解析 XML,感觉我现在在原地打转。我正在调用 WCF Web 服务,该服务根据用户输入通过数据库对公司名称进行搜索。它在 XML 文档中返回结果,每个条目的格式如下所示。

鉴于此 XML 结构,我将如何使用 C# 获取 d:AccountIdd:Name 节点的值?

<entry>
<id></id>
<title type=\"text\"></title>
<updated></updated>
<author><name /></author>
<link rel=\"edit\" title=\"Account\" href=\"AccountSet\" />
<category term=\"Microsoft.Crm.Sdk.Data.Services.Account\" scheme=\"http://schemas.microsoft.com/ado/2007/08/dataservices/scheme\" />
<content type=\"application/xml\">
<m:properties>
<d:neu_UniqueId></d:neu_UniqueId>
<d:AccountId m:type=\"Edm.Guid\"></d:AccountId>
<d:Name></d:Name>
</m:properties></content>
</entry>

这是我的第一次尝试。该程序在 node3 变量处抛出异常。

        try
{
WebRequest myWebRequest = WebRequest.Create(URL);
myWebRequest.PreAuthenticate = true;
myWebRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;

//myWebRequest.Headers.Add("Access-Control-Allow-Origin", url);

WebResponse myWebResponse = myWebRequest.GetResponse();
Stream myFileStreamResult = myWebResponse.GetResponseStream();
Encoding encoder = System.Text.Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader(myFileStreamResult, encoder);

results = readStream.ReadToEnd();

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(results);
XmlNodeList parentNode = xmlDoc.GetElementsByTagName("entry");

foreach (XmlNode childNode in parentNode)
{

string node = childNode.ToString();
string node2 = childNode.Value;
string node3 = childNode.Attributes["title"].Value;
string node7 = childNode.Attributes["m:properties"].Value;
string node8 = childNode.Attributes["m:properties\\d:AccountId"].Value;
string node9 = childNode.Attributes["m:properties\\d:Name"].Value;
string node10 = childNode.Attributes["m:properties\\d:AccountId"].Value;
}

}

最佳答案

假设 API 可靠地返回该 XML 结构,您可以简单地将节点路径指定为 "/entry/m:properties"然后调用 child 。之后,您需要遍历这些节点,检查您想要的节点。

当前您的 foreach 循环正在尝试对 <id></id> 执行所有这些操作由于没有“title”属性而导致异常的节点。

因此,为了提供一些示例代码,您正在寻找类似这样的东西;

XmlNode props = root.SelectSingleNode("/entry/m:properties");
for (int i = 0; i < props.ChildNodes.Count; i++)
{
if (propes.ChildNodes[i].Name = "node I want")
{
//do something
}
}

或者,如果您特别想要这两个值,则只需使用 SelectSingleNode与该节点的完整路径。从你的问题来看,似乎没有理由使用迭代。所以你可以简单地做;

   string accountName = root.SelectSingleNode("/entry/m:properties/d:Name").InnerXml;

获取账户名。

关于c# - C#获取XML子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16197434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com