我想在输出中打印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>
答案 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;