如何在 XSLT 中正确使用名称空间声明?
How do I use a namespace declaration properly in XSLT?
我正在尝试声明一个名称空间,以便我的 XML 中的所有元素在每个元素的名称前都有一个标记 "tg:"。但是它似乎没有用,我不确定为什么。
这是我的输入 XML;
<?xml version="1.0"?>
<orders>
<dataroot generated="2015-01-09T11:57:36" xmlns:od="urn:schemas-microsoft-com:officedata">
<order job_id="S026500-1" site_code="DG" replace="true">
<job_description>TESTING</job_description>
<order_qty>20000</order_qty>
<finishing_style>PB</finishing_style>
<depth>10</depth>
<width>8</width>
<cover_pagination>4</cover_pagination>
<text_pagination>24</text_pagination>
<delivery_commence_date>19/12/2014</delivery_commence_date>
<delivery_complete_date>19/12/2014</delivery_complete_date>
<job_site>DG</job_site>
<managing_printer>DG</managing_printer>
<is_managing_printer>True</is_managing_printer>
<master_version>
<version_code>COMM</version_code>
<version_common>true</version_common>
<version_finished>false</version_finished>
<version_description>common</version_description>
<version_nett_qty>20000</version_nett_qty>
<version_special_qty>0</version_special_qty>
</master_version>
</order>
</dataroot>
</orders>
这就是我希望输出的样子;
<?xml version="1.0"?>
<tg:orders>
<tg:order job_id="S026500-1" site_code="DG" replace="true">
<tg:job_description>TESTING</job_description>
<tg:order_qty>20000</order_qty>
<tg:finishing_style>PB</finishing_style>
<tg:depth>10</depth>
<tg:width>8</width>
<tg:cover_pagination>4</cover_pagination>
<tg:text_pagination>24</text_pagination>
<tg:delivery_commence_date>19/12/2014</delivery_commence_date>
<tg:delivery_complete_date>19/12/2014</delivery_complete_date>
<tg:job_site>DG</job_site>
<tg:managing_printer>DG</managing_printer>
<tg:is_managing_printer>True</is_managing_printer>
<tg:master_version>
<tg:version_code>COMM</version_code>
<tg:version_common>true</version_common>
<tg:version_finished>false</version_finished>
<tg:version_description>common</version_description>
<tg:version_nett_qty>20000</version_nett_qty>
<tg:version_special_qty>0</version_special_qty>
</tg:master_version>
</tg:order>
</tg:orders>
这是我的 XSLT;
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/*[local-name()='orders']">
<orders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tg="http://www.technique-group.com" xsi:schemaLocation="http://www.technique-group.com/schemas TGScheduleImport_v1.4.xsd" tg:version="1.2">
<xsl:copy-of select="node()|@*"/>
</orders>
</xsl:template>
</xsl:stylesheet>
有人可以向我解释我做错了什么吗?我还想删除 dataroot 元素,但可以稍后再删除。
使用
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tg="http://www.technique-group.com"
version="1.0">
<xsl:template match="*">
<xsl:element name="tg:{local-name()}" namespace="http://www.technique-group.com">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="dataroot">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
确保输入中的所有元素都转换为新的命名空间,dataroot
除外,它被剥离。
我正在尝试声明一个名称空间,以便我的 XML 中的所有元素在每个元素的名称前都有一个标记 "tg:"。但是它似乎没有用,我不确定为什么。
这是我的输入 XML;
<?xml version="1.0"?>
<orders>
<dataroot generated="2015-01-09T11:57:36" xmlns:od="urn:schemas-microsoft-com:officedata">
<order job_id="S026500-1" site_code="DG" replace="true">
<job_description>TESTING</job_description>
<order_qty>20000</order_qty>
<finishing_style>PB</finishing_style>
<depth>10</depth>
<width>8</width>
<cover_pagination>4</cover_pagination>
<text_pagination>24</text_pagination>
<delivery_commence_date>19/12/2014</delivery_commence_date>
<delivery_complete_date>19/12/2014</delivery_complete_date>
<job_site>DG</job_site>
<managing_printer>DG</managing_printer>
<is_managing_printer>True</is_managing_printer>
<master_version>
<version_code>COMM</version_code>
<version_common>true</version_common>
<version_finished>false</version_finished>
<version_description>common</version_description>
<version_nett_qty>20000</version_nett_qty>
<version_special_qty>0</version_special_qty>
</master_version>
</order>
</dataroot>
</orders>
这就是我希望输出的样子;
<?xml version="1.0"?>
<tg:orders>
<tg:order job_id="S026500-1" site_code="DG" replace="true">
<tg:job_description>TESTING</job_description>
<tg:order_qty>20000</order_qty>
<tg:finishing_style>PB</finishing_style>
<tg:depth>10</depth>
<tg:width>8</width>
<tg:cover_pagination>4</cover_pagination>
<tg:text_pagination>24</text_pagination>
<tg:delivery_commence_date>19/12/2014</delivery_commence_date>
<tg:delivery_complete_date>19/12/2014</delivery_complete_date>
<tg:job_site>DG</job_site>
<tg:managing_printer>DG</managing_printer>
<tg:is_managing_printer>True</is_managing_printer>
<tg:master_version>
<tg:version_code>COMM</version_code>
<tg:version_common>true</version_common>
<tg:version_finished>false</version_finished>
<tg:version_description>common</version_description>
<tg:version_nett_qty>20000</version_nett_qty>
<tg:version_special_qty>0</version_special_qty>
</tg:master_version>
</tg:order>
</tg:orders>
这是我的 XSLT;
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/*[local-name()='orders']">
<orders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tg="http://www.technique-group.com" xsi:schemaLocation="http://www.technique-group.com/schemas TGScheduleImport_v1.4.xsd" tg:version="1.2">
<xsl:copy-of select="node()|@*"/>
</orders>
</xsl:template>
</xsl:stylesheet>
有人可以向我解释我做错了什么吗?我还想删除 dataroot 元素,但可以稍后再删除。
使用
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tg="http://www.technique-group.com"
version="1.0">
<xsl:template match="*">
<xsl:element name="tg:{local-name()}" namespace="http://www.technique-group.com">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="dataroot">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
确保输入中的所有元素都转换为新的命名空间,dataroot
除外,它被剥离。