从标签中删除名称空间

时间:2019-07-18 07:30:26

标签: xml xslt

我想在输出中打印xml的某些部分。但是在执行此操作时,名称空间将被附加到标签的输出中。我希望从输出中删除该名称空间。请帮忙。

xmltoxslt.xsl文件:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match = "data">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>

input.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:LogDel xmlns:ns0="http://world.com/pi/M/LogDeli">
   <data>
      <ERP>123</ERP>
      <Issuedate>2019-02-18</Issuedate>
      <Shippingpoint>2234</Shippingpoint>
      <Shiptoparty>XXXXXXX</Shiptoparty>
      <products>
         <SKUno>dfsf</SKUno>
         <QTY>50</QTY>
         <Unit>L</Unit>
      </products>
      <products>
         <SKUno>sfsdf</SKUno>
         <QTY>30532</QTY>
         <Unit>KG</Unit>
      </products>
   </data>
   <data>
      <ERP>345</ERP>
      <Issuedate>2019-03-07</Issuedate>
      <Shippingpoint/>
      <Shiptoparty>XXXXXXX</Shiptoparty>
      <products>
         <SKUno>dsfsf</SKUno>
         <QTY>1000</QTY>
         <Unit>L</Unit>
      </products>
      <products>
         <SKUno>sfsdf</SKUno>
         <QTY>300</QTY>
         <Unit>KG</Unit>
      </products>
   </data>
</ns0:LogDeli>

InputOuput.xml文件:

<data xmlns:ns0="http://world.com/pi/M/LogDeli">
     <ERP>123</ERP>
      <Issuedate>2019-02-18</Issuedate>
      <Shippingpoint>2234</Shippingpoint>
      <Shiptoparty>XXXXXXX</Shiptoparty>
      <products>
         <SKUno>dfsf</SKUno>
         <QTY>50</QTY>
         <Unit>L</Unit>
      </products>
      <products>
         <SKUno>sfsdf</SKUno>
         <QTY>30532</QTY>
         <Unit>KG</Unit>
      </products>
   </data>
   <data xmlns:ns0="http://world.com/pi/M/LogDeli">
     <ERP>345</ERP>
      <Issuedate>2019-03-07</Issuedate>
      <Shippingpoint/>
      <Shiptoparty>XXXXXXX</Shiptoparty>
      <products>
         <SKUno>dsfsf</SKUno>
         <QTY>1000</QTY>
         <Unit>L</Unit>
      </products>
      <products>
         <SKUno>sfsdf</SKUno>
         <QTY>300</QTY>
         <Unit>KG</Unit>
      </products>
   </data>

我想从数据标签中删除名称空间xmlns:ns0="http://world.com/pi/M/LogDeli"。应该像<data>

2 个答案:

答案 0 :(得分:1)

尽管xmlns:ns0="http://world.com/pi/M/LogDeli"仅在XML的根元素上显示为文本,但是当解析此词法XML时,所有后代元素也将针对它们存储该声明。这意味着,当您执行xsl:copy-of时,声明也将被复制。

您需要做的是为data及其所有后代创建新元素。

尝试使用此XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes"/>

  <xsl:template match="data|data//*">
    <xsl:element name="{local-name()}">
      <xsl:copy-of select="@*" />
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

另一方面,如果可以使用XSLT 2.0,则可以在copy-namespaces上使用xsl:copy-of

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes"/>

  <xsl:template match="data">
    <xsl:copy-of select="." copy-namespaces="no" />
  </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

仅以下更改:-

From user
INNER JOIN user_has_module
ON user.userid = user_has_module.user_userid
INNER JOIN module
ON user_has_module.module_moduleid = module.moduleid;