XSLT在同一时间删除名称空间前缀和空标记

时间:2018-03-15 18:32:16

标签: xml xslt

我正在寻找一个可以删除名称空间前缀以及空标签的XSLT,我在论坛中搜索过我发现两个单独的XSLT来实现这一点,我试图找到一个可以同时执行这两个操作的XSLT。

请注意我在XSLT中不太精通,所以在这里寻求帮助。

source xml:

<ns1:DSBookingDetail xmlns:ns1="http://example.com">
    <ns1:BookingNo>000123</ns1:BookingNo>
    <ns1:SeqNo>1</ns1:SeqNo>
    <ns1:LineType>Item</ns1:LineType>
    <ns1:ProductCode>Box</ns1:ProductCode>
    <ns1:ProductCategory></ns1:ProductCategory>    <!-- empty tag -->
</ns1:DSBookingDetail>

target xml :(删除名称空间前缀后为空标记)

<DSBookingDetail>
    <BookingNo>000123</BookingNo>
    <SeqNo>1</SeqNo>
    <LineType>Item</LineType>
    <ProductCode>Box</ProductCode>
</DSBookingDetail>

1 个答案:

答案 0 :(得分:1)

您可以使用local-name()作为新名称重建所有元素,并检查其内容是否同时为空。

<xsl:template match="*[normalize-space(.)]">     <!-- only match non-empty elements -->
  <xsl:element name="{local-name()}">            <!-- reconstruct element without namespace-prefix -->
    <xsl:apply-templates select="node()|@*" />   <!-- recurse further -->
  </xsl:element>
</xsl:template>