XmlNodeList为空,在C#代码中使用NameSpace

时间:2015-11-25 15:32:03

标签: c# xml-namespaces xmlnode xmlnodelist

我想进入一个特定的路径' / trace / calls / call / userTableParameters / parameter'并使用值取出所有参数名称。我在执行xmlnode选择时在xpath中使用了命名空间。它返回正确的fisrt childnode'参数'。但xmlnodelist不会进一步返回任何内容。我的代码会出现什么问题?

 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">---&gt;</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>

1 个答案:

答案 0 :(得分:1)

您的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);