选择“单个节点”
本文关键字:单个节点 节点 单个 选择 | 更新日期: 2023-09-27 18:35:56
来自以下 xml:
<response>
<content>
<Result xmlns="http://www.test.com/nav/webservices/types">
<Name>Test</Name>
</Result>
</content>
<status>ok</status>
</response>
我正在尝试通过以下方式获取 Name 元素的值,但这不起作用:
private static void Main()
{
var response = new XmlDocument();
response.Load("Response.xml");
var namespaceManager = new XmlNamespaceManager(response.NameTable);
namespaceManager.AddNamespace("ns", "http://www.test.com/nav/webservices/types");
Console.WriteLine(response.SelectSingleNode("/response/content/Result/Name", namespaceManager).InnerXml);
}
如何选择名称元素?
如果 Xml 使用"ns:"前缀定义了命名空间,您的代码就会正常工作。
但在这种情况下,命名空间没有任何前缀,这会将 Result 标记中所有内容的默认命名空间设置为".../webservice/types"。
为了反映这一点,您需要修改 Xpath,并告诉 XmlDocument 您要在 Web 服务/类型命名空间中的 Resultare 下查找的节点。因此,您的查询将如下所示:
Console.WriteLine(response.SelectSingleNode(@"/response/content/ns:Result/ns:Name", namespaceManager).InnerXml);
为了直接获取节点的文本值,有一个text()
函数,如果在查询中使用,它将如下所示:
/response/content/Result/Name/text()
试试这个:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.InnerXml = "<response><content><Result xmlns='"http://www.test.com/nav/webservices/types'"><Name>Test</Name></Result></content><status>ok</status>";
string elementValue = String.Empty;
if (xmlDoc != null)
{
xNode = xmlDoc.SelectSingleNode("/Result");
xNodeList = xNode.ChildNodes;
foreach (XmlNode node in xNodeList)
{
elementValue = node.InnerText;
}
}