如何在具有 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 获取特定的嵌套元素? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如果元素具有 xmlns 属性,Xpath 将失败 [重复]