我有一个XSLT来转换XML文件。此转换声明一个名称空间,以重命名所有元素以具有" tg:"字首。我的问题是这个;我还想重命名特定元素中的特定属性。
我现在似乎只能做一个或另一个。
这是我目前的XSLT文档;
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tg="http://www.technique-group.com"
version="1.2">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@job_id">
<xsl:attribute name="tg:job_id">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<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:stylesheet>
适用于此时;
<?xml version="1.0" encoding="UTF-8"?>
<orders xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:tg="http://www.technique-group.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.technique-group.com/schemas TGScheduleImport_v1.4.xsd" tg:version="1.2">
<order job_id="S032132COM" site_code="DG" replace="true">
<job_description>TEST IMPORT</job_description>
<order_qty>25000</order_qty>
<finishing_style>WS</finishing_style>
<depth>210</depth>
<width>148</width>
<cover_pagination>4</cover_pagination>
<text_pagination>24</text_pagination>
<delivery_commence_date>2015-04-22T12:30:00</delivery_commence_date>
<delivery_complete_date>2015-04-23T12:30:00</delivery_complete_date>
<job_site>DG</job_site>
<managing_printer>DG</managing_printer>
<is_managing_printer>true</is_managing_printer>
<cust_code>C02071</cust_code>
<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>22500</version_nett_qty>
<version_special_qty>2500</version_special_qty>
</master_version>
<press_section>
<signature_id>0</signature_id>
<sequence_id>0</sequence_id>
<sequence_alpha>A</sequence_alpha>
<description>4pp Cover</description>
<pagination>4</pagination>
<trim_size>210 x 148</trim_size>
<version>
<version_code>COMM</version_code>
<task_info confirmed="true" maintenance="false" provisional="false">
<task_sub_job_id>S032132-1</task_sub_job_id>
<task_seq_id>1</task_seq_id>
<task_description>4pp Cover</task_description>
<task_qty_rqd>25000</task_qty_rqd>
<task_resource_id>21015</task_resource_id>
<task_mr_mins>30</task_mr_mins>
<task_run_mins>60</task_run_mins>
<task_run_speed>12000</task_run_speed>
<task_no_up>2</task_no_up>
<task_deadline_date_time>2015-04-22T13:00:00</task_deadline_date_time>
<task_pdt>0.0</task_pdt>
</task_info>
</version>
</press_section>
</order>
</orders>
我明白了;
<?xml version="1.0" encoding="UTF-8"?>
<tg:orders xmlns:tg="http://www.technique-group.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.technique-group.com/schemas TGScheduleImport_v1.4.xsd" tg:version="1.2">
<tg:order job_id="S032132COM" site_code="DG" replace="true">
<tg:job_description>TEST IMPORT</tg:job_description>
<tg:order_qty>25000</tg:order_qty>
<tg:finishing_style>WS</tg:finishing_style>
<tg:depth>210</tg:depth>
<tg:width>148</tg:width>
<tg:cover_pagination>4</tg:cover_pagination>
<tg:text_pagination>24</tg:text_pagination>
<tg:delivery_commence_date>2015-04-22T12:30:00</tg:delivery_commence_date>
<tg:delivery_complete_date>2015-04-23T12:30:00</tg:delivery_complete_date>
<tg:job_site>DG</tg:job_site>
<tg:managing_printer>DG</tg:managing_printer>
<tg:is_managing_printer>true</tg:is_managing_printer>
<tg:cust_code>C02071</tg:cust_code>
<tg:master_version>
<tg:version_code>COMM</tg:version_code>
<tg:version_common>true</tg:version_common>
<tg:version_finished>false</tg:version_finished>
<tg:version_description>Common</tg:version_description>
<tg:version_nett_qty>22500</tg:version_nett_qty>
<tg:version_special_qty>2500</tg:version_special_qty>
</tg:master_version>
<tg:press_section>
<tg:signature_id>0</tg:signature_id>
<tg:sequence_id>0</tg:sequence_id>
<tg:sequence_alpha>A</tg:sequence_alpha>
<tg:description>4pp Cover</tg:description>
<tg:pagination>4</tg:pagination>
<tg:trim_size>210 x 148</tg:trim_size>
<tg:version>
<tg:version_code>COMM</tg:version_code>
<tg:task_info confirmed="true" maintenance="false" provisional="false">
<tg:task_sub_job_id>S032132-1</tg:task_sub_job_id>
<tg:task_seq_id>1</tg:task_seq_id>
<tg:task_description>4pp Cover</tg:task_description>
<tg:task_qty_rqd>25000</tg:task_qty_rqd>
<tg:task_resource_id>21015</tg:task_resource_id>
<tg:task_mr_mins>30</tg:task_mr_mins>
<tg:task_run_mins>60</tg:task_run_mins>
<tg:task_run_speed>12000</tg:task_run_speed>
<tg:task_no_up>2</tg:task_no_up>
<tg:task_deadline_date_time>2015-04-22T13:00:00</tg:task_deadline_date_time>
<tg:task_pdt>0.0</tg:task_pdt>
</tg:task_info>
</tg:version>
</tg:press_section>
</tg:order>
</tg:orders>
但是我真的需要&#34; job_id&#34;属性在&#34;顺序&#34;元素有&#34; tg:&#34;字首。谁能告诉我我做错了什么?
全部谢谢!
答案 0 :(得分:2)
更改最后一个模板,不是复制属性,而是处理它们:
<xsl:template match="*" priority="10">
<xsl:element name="tg:{local-name()}" namespace="http://www.technique-group.com">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
此外,我不认为此处需要namespace
属性,因为tg
前缀的命名空间已在xsl:stylesheet
元素处声明。
答案 1 :(得分:2)
怎么样:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tg="http://www.technique-group.com">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- move elements to new namespace -->
<xsl:template match="*">
<xsl:element name="tg:{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<!-- copy attributes -->
<xsl:template match="@*">
<xsl:copy-of select="."/>
</xsl:template>
<!-- exception -->
<xsl:template match="order/@job_id">
<xsl:attribute name="tg:job_id">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>