如何在具有 xmlns 属性的 xml 中使用 xpath 获取特定的嵌套元素? [复制]

Posted

技术标签:

【中文标题】如何在具有 xmlns 属性的 xml 中使用 xpath 获取特定的嵌套元素? [复制]【英文标题】:How to get specific nested element using xpath inside xml with xmlns attributes? [duplicate] 【发布时间】:2020-09-07 18:02:32 【问题描述】:

我有一个 XML,我想使用 XPath 获取一个特定的嵌套元素,但它不起作用。也许这就是标签包含 xmlns 属性的原因。有什么建议吗?

<DataPDU xmlns="urn:cma:stp:xsd:stp.1.0">
<Body>
    <AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.01">
        <test1>
            <test2>
                <test3>
                    <test4>text</test4>
                </test3>
            </test2>
        </test1>
        <test5>
            <test6>
                <test7>
                    <test8>dummy text</test8>
                </test7>
            </test6>
        </test5>
        <test9>test</test9>
        <test10>p1212121</test10>
        <test11>147</test11>
        <test12>lorem</test12>
    </AppHdr>
    <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08">
        <test13>
                <test14>
                        <test15>asap</test15>
                </test14>
        </test13>
    </Document>
</Body>

【问题讨论】:

除了标记为重复的“规范”答案之外,搜索“XSLT 默认命名空间”以获取此问题的许多其他答案, 【参考方案1】:

是的,您必须定义命名空间。看看这个-

How to get XML element with namespace

或者您可以将 xml 作为字符串传递并使用正则表达式删除这些属性 -

Regex.Replace(xmlString, @"(\sxmlns="".+"")", "")

根据您的用例,您可以使用其中任何一种。

【讨论】:

此解决方案按预期工作。为什么投反对票? 它不起作用。编译器显示错误 然后讨论。你能显示你的代码吗?你用什么方法?什么是编译器错误? @"(xmlns=\".+\")", "" 部分的语法错误 啊,是的,c# 正则表达式略有不同,需要双引号。我已经用正确的正则表达式模式编辑了我的答案。

以上是关于如何在具有 xmlns 属性的 xml 中使用 xpath 获取特定的嵌套元素? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .NET XML API 删除 xmlns 属性

如果元素具有 xmlns 属性,Xpath 将失败 [重复]

XPath:选择具有显式“xmlns”属性的节点

从 wcf RESTful 响应中的 xml 中删除 xmlns 属性

在 C# 中删除具有空属性的 XML 标记

如何防止 .NET 的 XmlDocument 输出中出现空白 xmlns 属性?