【问题标题】:How to get specific nested element using xpath inside xml with xmlns attributes? [duplicate]如何在具有 xmlns 属性的 xml 中使用 xpath 获取特定的嵌套元素? [复制]
【发布时间】: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 默认命名空间”以获取此问题的许多其他答案,

标签: c# .net xml xpath


【解决方案1】:

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

How to get XML element with namespace

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

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

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

【讨论】:

  • 此解决方案按预期工作。为什么投反对票?
  • 它不起作用。编译器显示错误
  • 然后讨论。你能显示你的代码吗?你用什么方法?什么是编译器错误?
  • @"(xmlns=\".+\")", "" 部分的语法错误
  • 啊,是的,c# 正则表达式略有不同,需要双引号。我已经用正确的正则表达式模式编辑了我的答案。
猜你喜欢
  • 2012-01-16
  • 2021-12-28
  • 2011-07-14
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
相关资源
最近更新 更多