【问题标题】:XPath to retrive XML tag value without Namespace and prefixXPath 检索没有命名空间和前缀的 XML 标记值
【发布时间】:2021-11-02 03:31:41
【问题描述】:

我有以下 XML -

<d><m:properties xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
                            <d:AllTexts/>
                            <d:BomFlag/>
                            <d:OrderNumber>9489</d:OrderNumber>
                            <d:LineNumber>000000</d:LineNumber>
                            <d:VcFlag>Y</d:VcFlag>
                            <d:PricingFlag/>
                            <d:TextType>H</d:TextType>
                            <d:TextId>ZC01</d:TextId>
                            <d:TextLineNo>1</d:TextLineNo>
                            <d:TextLine>ecom header text 1</d:TextLine>                         

并尝试根据 TextId = ZC01 检索 TextLine 节点列表 - &lt;TextLine&gt;ecom header text1&lt;/TextLine&gt;

当我将 xpath 应用为 --> //m:properties[d:TextId = 'ZC01']/d:TextLine

我得到的输出为 - &lt;d:TextLine xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"&gt;ecom header text 1&lt;/d:TextLine&gt;

如何删除前缀和命名空间?我尝试使用 local-name(),但是没有用 可能会以错误的方式使用它。 感谢您的帮助!

谢谢 菅田

【问题讨论】:

    标签: xpath xml-namespaces xpath-3.1


    【解决方案1】:

    XPath 是一种选择语言:它只能检索实际存在的节点,不能以任何方式更改它们。如果所选元素在原始元素中有前缀和命名空间,那么结果中也会有前缀和命名空间。

    但是,您需要区分 XPath 选择的内容(节点)和结果的显示方式。这取决于评估 XPath 的应用程序。显示由 XPath 表达式选择的节点的两种流行方法是 (a) 通过将节点序列化为 XML(这是我们在您的情况下看到的),以及 (b) 通过显示所选节点的路径,例如 @ 987654321@。您还没有告诉我们您是如何评估 XPath 表达式或显示其结果的,您可以在这里选择。

    但也许您应该考虑使用 XSLT 或 XQuery,它们(与 XPath 不同)允许您构建不同于原始 XML 的新 XML。

    【讨论】:

    • 感谢您的回复。我将编写一个 groovy 脚本来修改 XML。
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2015-06-05
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    相关资源
    最近更新 更多