XmlNodeList 为空,C# 代码中的 NameSpace
XmlNodeList is empty with NameSpace in C# code
我想进入特定路径“/trace/calls/call/userTableParameters/parameter”并取出所有带值的参数名称。我在选择 xmlnode 时在 xpath 中使用了命名空间。它 return 是右第一个子节点 'parameter'。但是 xmlnodelist 没有 return 任何内容。我的代码会出现什么问题?
XmlDocument doc = new XmlDocument();
doc.Load(@"d:\Drops.xml");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("nsTrace", "http://www.polystar.com/OSIX/monitoring/traceSchemaV1.0");
XmlNode ParameterNode = doc.SelectSingleNode("//nsTrace:userTableParameters", nsmgr);
XmlNodeList ParameterNodeList = ParameterNode.SelectNodes("//parameter");
foreach (XmlNode node in ParameterNodeList)
{
Parameter drop = new Parameter();
drop.name = node.Attributes.GetNamedItem("name").Value;
drop.content = node.InnerText;
callParameter.ParameterList.Add(drop);
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<trace xmlns="http://www.polystar.com/OSIX/monitoring/traceSchemaV1.0">
<calls>
<call>
<messages>
<message>
<parameters>
<parameter name="Timestamp">Wed 11 Nov 2015 11:58:14.096</parameter>
<parameter name="Direction">---></parameter>
<parameter name="Resulting Status">Normal</parameter>
<parameter name="Resulting State Name">AP Request Pending</parameter>
<parameter name="Source Address">11.111.111.11</parameter>
<parameter name="Dest Address">11.222.222.22; ABC2</parameter>
<parameter name="Media Probe Id"/>
<parameter name="Deciphered"/>
</parameters>
</message>
</messages>
<userTableParameters>
<parameter name="Start Time">11:58:14.096</parameter>
<parameter name="End Time">11:58:27.191</parameter>
<parameter name="Duration">00:00:13.095</parameter>
<parameter name="Date">Wed 11 Nov 2015</parameter>
<parameter name="Protocol">AP</parameter>
<parameter name="Status">End</parameter>
<parameter name="AP II"/>
<parameter name="AP TI">e0a5e84d'H</parameter>
<parameter name="AP Cause">3; due-to-generated-reason</parameter>
</userTableParameters>
</call>
</calls>
</trace>
您的 Xpath 查询有误。
我也缩短了你的代码。
有关 Xpath
的更多信息
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("nsTrace","http://www.polystar.com/OSIX/monitoring/traceSchemaV1.0");
XmlNodeList ParameterNodeList = doc.SelectNodes("//nsTrace:userTableParameters//nsTrace:parameter", nsmgr);
我想进入特定路径“/trace/calls/call/userTableParameters/parameter”并取出所有带值的参数名称。我在选择 xmlnode 时在 xpath 中使用了命名空间。它 return 是右第一个子节点 'parameter'。但是 xmlnodelist 没有 return 任何内容。我的代码会出现什么问题?
XmlDocument doc = new XmlDocument();
doc.Load(@"d:\Drops.xml");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("nsTrace", "http://www.polystar.com/OSIX/monitoring/traceSchemaV1.0");
XmlNode ParameterNode = doc.SelectSingleNode("//nsTrace:userTableParameters", nsmgr);
XmlNodeList ParameterNodeList = ParameterNode.SelectNodes("//parameter");
foreach (XmlNode node in ParameterNodeList)
{
Parameter drop = new Parameter();
drop.name = node.Attributes.GetNamedItem("name").Value;
drop.content = node.InnerText;
callParameter.ParameterList.Add(drop);
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<trace xmlns="http://www.polystar.com/OSIX/monitoring/traceSchemaV1.0">
<calls>
<call>
<messages>
<message>
<parameters>
<parameter name="Timestamp">Wed 11 Nov 2015 11:58:14.096</parameter>
<parameter name="Direction">---></parameter>
<parameter name="Resulting Status">Normal</parameter>
<parameter name="Resulting State Name">AP Request Pending</parameter>
<parameter name="Source Address">11.111.111.11</parameter>
<parameter name="Dest Address">11.222.222.22; ABC2</parameter>
<parameter name="Media Probe Id"/>
<parameter name="Deciphered"/>
</parameters>
</message>
</messages>
<userTableParameters>
<parameter name="Start Time">11:58:14.096</parameter>
<parameter name="End Time">11:58:27.191</parameter>
<parameter name="Duration">00:00:13.095</parameter>
<parameter name="Date">Wed 11 Nov 2015</parameter>
<parameter name="Protocol">AP</parameter>
<parameter name="Status">End</parameter>
<parameter name="AP II"/>
<parameter name="AP TI">e0a5e84d'H</parameter>
<parameter name="AP Cause">3; due-to-generated-reason</parameter>
</userTableParameters>
</call>
</calls>
</trace>
您的 Xpath 查询有误。 我也缩短了你的代码。 有关 Xpath
的更多信息XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("nsTrace","http://www.polystar.com/OSIX/monitoring/traceSchemaV1.0");
XmlNodeList ParameterNodeList = doc.SelectNodes("//nsTrace:userTableParameters//nsTrace:parameter", nsmgr);