C# 如何选择具有名称空间的XML节点

C# 如何选择具有名称空间的XML节点,c#,xml,xpath,xmldocument,C#,Xml,Xpath,Xmldocument,我需要获取第二个节点下的节点列表。如果使用以下XML源代码和C代码,FolderNode将设置为正确的节点(第二个节点),但ItemsList将设置为文件中每个的集合,包括第一个文件夹节点中的项目。因此,ItemsList包含5项而不是3项 XML来源: <?xml version="1.0" encoding="UTF-8"?> <MMM xmlns="http://some.url.com/2.0"> <Document> <

我需要获取第二个
节点下的
节点列表。如果使用以下XML源代码和C代码,FolderNode将设置为正确的节点(第二个
节点),但ItemsList将设置为文件中每个
的集合,包括第一个文件夹节点中的项目。因此,ItemsList包含5项而不是3项

XML来源:

<?xml version="1.0" encoding="UTF-8"?>
<MMM xmlns="http://some.url.com/2.0">
    <Document>
        <open>1</open>
        <Folder>
            <name>Folder_1_Data</name>
            <Item>
                <description>Folder 1 Item 1</description>
            </Item>
            <Item>
                <description>Folder 1 Item 2</description>
            </Item>
        </Folder>
        <Folder>
            <name>Folder_2_Data</name>
            <Item>
                <description>Folder 2 Item A</description>
            </Item>
            <Item>
                <description>Folder 2 Item B</description>
            </Item>
            <Item>
                <description>Folder 2 Item C</description>
            </Item>
        </Folder>
    </Document>
</MMM>

您只需添加一个前导的
,以指示XPath相对于当前的
FolderNode

var ItemsList=FolderNode.SelectNodes(“.//abc:Item”,nsmgr);
//^注意这个点
由于
节点是
节点的直接子节点,因此也可以这样做:

var ItemsList=FolderNode.SelectNodes(“abc:Item”,nsmgr);
//开头没有符号,这。。
//^.. 将仅返回直接子节点
或者这样:

var ItemsList=FolderNode.SelectNodes(“./abc:Item”,nsmgr);
//^使用也返回..的单斜杠。。
//.. 仅直接子节点