0
以下是我的XML。我想用XSL解析这个。我想要实现的是删除名称空间(xmlns),然后保留一些元素及其属性。我找到了一种删除命名空间的方法,但是当我将它与代码放在一起以保留一些元素时,它不起作用。我已经尝试了身份,但仍然没有奏效。如何删除名称空间并仅使用XSL保留原始XML文档中的某些元素?
我希望有人能分享一些东西。非常感谢你提前。
XML输入:
<Transaction xmlns="http://www.test.com/rdc.xsd">
<Transaction>
<StoreName id="aa">STORE A</StoreName>
<TransNo>TXN0001</TransNo>
<RegisterNo>REG001</RegisterNo>
<Items>
<Item id="1">
<ItemID>A001</ItemID>
<ItemDesc>Keychain</ItemDesc>
</Item>
<Item id="2">
<ItemID>A002</ItemID>
<ItemDesc>Wallet</ItemDesc>
</Item>
</Items>
<IDONTLIKETHIS_1>
<STOREXXX>XXX-</STOREXXX>
<TRANSXXX>YYY</TRANSXXX>
</IDONTLIKETHIS_1>
<IDONTLIKETHIS_2>
<STOREXXX>XXX-</STOREXXX>
<TRANSXXX>YYY</TRANSXXX>
</IDONTLIKETHIS_2>
</Transaction>
<Transaction>
期望的XML输出:
<Transaction>
<Transaction>
<StoreName id="aa">STORE A</StoreName>
<TransNo>TXN0001</TransNo>
<RegisterNo>REG001</RegisterNo>
<Items>
<Item id="1">
<ItemID>A001</ItemID>
<ItemDesc>Keychain</ItemDesc>
</Item>
<Item id="2">
<ItemID>A002</ItemID>
<ItemDesc>Wallet</ItemDesc>
</Item>
</Items>
</Transaction>
<Transaction>
代码用于去除命名空间(XMLNS):
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
喜dimitre这是很大的。所以基本上它做了什么,你创建了一个匹配IDONTLIKE元素并且什么也不做的模板,对吧?它取消了这些元素的复制。是否有可能做一个逻辑,只复制我喜欢的元素,而不是指定我不喜欢的元素?我为我的问题表示歉意。我对XML和XSL相当陌生。非常感谢你 – Amy
另外,如果你能解释第二个模板的功能。非常感谢。 – Amy
@Amy:是的,可以只匹配你喜欢的元素 - 你只需要定义它们。此刻,我只是在做这个 - 你喜欢的元素都是元素减去你不喜欢的元素:) –