1

我有以下 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 节点列表 - <TextLine>ecom header text1</TextLine>

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

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

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

谢谢菅田

4

1 回答 1

0

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

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

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

于 2021-09-04T14:11:33.810 回答