이전과 비슷한 질문을했지만 여기서는 약간 혼란 스럽습니다.XSLT 요소를 특성으로 변환하고 요소를 제거합니다. XML
XML이있어서 일부 요소를 상위 요소의 특성으로 변환하려고합니다. 이미 한 요소에 대해이 작업을 수행하고 있지만 다른 요소에 대해 수행하려고합니다. XSLT 코드를 복사하고 변경해야하는 부분의 이름을 바꾸는 경우가 될 것이라고 생각했지만 예상대로 작동하지 않습니다. 요소에서 노드를 제거하지만 속성으로 변경하지는 않습니다. 그냥 사라지고있어.
다른 요소와 비교할 때 값에 따라 요소를 제거하려고합니다. 이 작업은 내 XSLT의 다른 요소에서도 수행되지만 코드를 복사 할 때 동일한 결과를 얻지 못하는 것 같습니다. "task_info"의 "task_seq_id"가 "press_section"의 "sequence_id"와 일치하지 않으면 "press_section"에 중첩 된 "task_info"요소를 제거하려고합니다.
마지막으로, 필자는 XSLT가 XML에서 "dataroot"요소를 더 이상 제거하지 않고 있음을 발견했습니다.
나는 모든 정직함에서 내가 여기서하고있는 것을 정말로 볼 수 없기 때문에 도움이된다.
감사합니다.
내 입력 XML은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2015-01-16T10:32:47">
<order>
<ORDERPK>4</ORDERPK>
<job_id>S019191-1</job_id>
<site_code>DG</site_code>
<Replace>true</Replace>
<job_description>TEST</job_description>
<order_qty>2000</order_qty>
<depth>10</depth>
<width>8</width>
<cover_pagination>4</cover_pagination>
<text_pagination>12</text_pagination>
<delivery_commence_date>15/1/2014</delivery_commence_date>
<job_site>DG</job_site>
<managing_printer>DG</managing_printer>
<is_managing_printer>True</is_managing_printer>
</order>
<master_version>
<ORDER>3</ORDER>
<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>
<master_version>
<ORDER>4</ORDER>
<version_code>COMM</version_code>
<version_common>true</version_common>
<version_finished>false</version_finished>
<version_description>common</version_description>
<version_nett_qty>2000</version_nett_qty>
</master_version>
<press_section>
<ORDER>3</ORDER>
<signature_id>001</signature_id>
<sequence_id>0</sequence_id>
<sequence_alpha>A</sequence_alpha>
<description>4pp Cover</description>
<pagination>4</pagination>
<trim_size>10 x 8</trim_size>
</press_section>
<press_section>
<ORDER>4</ORDER>
<signature_id>001</signature_id>
<sequence_id>0</sequence_id>
<sequence_alpha>A</sequence_alpha>
<description>4pp Cover</description>
<pagination>4</pagination>
<trim_size>10 x 8</trim_size>
</press_section>
<press_section>
<ORDER>4</ORDER>
<signature_id>001</signature_id>
<sequence_id>1</sequence_id>
<sequence_alpha>A</sequence_alpha>
<description>6pp Cover</description>
<pagination>6</pagination>
<trim_size>10 x8</trim_size>
</press_section>
<version>
<ORDER>3</ORDER>
<version_code>COMM</version_code>
</version>
<version>
<ORDER>4</ORDER>
<version_code>COMM</version_code>
</version>
<task_info_press_section>
<ORDER>3</ORDER>
<PRESS_x0020_SECTION>3</PRESS_x0020_SECTION>
<confirmed>true</confirmed>
<maintenance>false</maintenance>
<provisional>false</provisional>
<task_sub_job_id>S026500-1-001COMM</task_sub_job_id>
<task_seq_id>0</task_seq_id>
<task_description>4ppCover</task_description>
<task_qty_rqd>20000</task_qty_rqd>
<task_resource_id>2</task_resource_id>
</task_info_press_section>
<task_info_press_section>
<ORDER>4</ORDER>
<PRESS_x0020_SECTION>4</PRESS_x0020_SECTION>
<confirmed>-1</confirmed>
<maintenance>0</maintenance>
<provisional>0</provisional>
<task_sub_job_id>S019191-1-001COMM</task_sub_job_id>
<task_seq_id>0</task_seq_id>
<task_description>4pp Cover</task_description>
<task_qty_rqd>1500</task_qty_rqd>
<task_resource_id>1</task_resource_id>
</task_info_press_section>
<task_info_press_section>
<ORDER>4</ORDER>
<PRESS_x0020_SECTION>4</PRESS_x0020_SECTION>
<confirmed>-1</confirmed>
<maintenance>0</maintenance>
<provisional>0</provisional>
<task_sub_job_id>S019191-1-001COMM</task_sub_job_id>
<task_seq_id>1</task_seq_id>
<task_description>6pp Cover</task_description>
<task_qty_rqd>500</task_qty_rqd>
<task_resource_id>1</task_resource_id>
</task_info_press_section>
</dataroot>
여기에 XSLT 1이 있습니다.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<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:apply-templates/>
</orders>
</xsl:template>
<!-- remove elements that don't match order -->
<xsl:template match="master_version[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="press_section[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="version[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="task_info_press_section[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="task_info_post_press[not(ORDER = //order/ORDERPK)]"/>
<xsl:template match="post_press_version[not(ORDER = //order/ORDERPK)]"/>
<!-- removed unwanted nodes from all elements -->
<xsl:template match="ORDER"/>
<xsl:template match="ORDERPK"/>
<xsl:template match="PRESS_x0020_SECTION"/>
<xsl:template match="POST_x0020_PRESS"/>
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<!-- create attributes in order element -->
<xsl:template match="dataroot">
<xsl:copy>
<xsl:apply-templates select="@*|node()[not(self::*)]|order"/>
</xsl:copy>
</xsl:template>
<xsl:template match="job_id | site_code | replace | Replace"/>
<xsl:template match="order">
<xsl:copy>
<xsl:apply-templates select="@*|node()[not(self::*)]|task_info_press_section"/>
</xsl:copy>
</xsl:template>
<xsl:template match="confirmed | maintenance | provisional"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- nest specified element within matched element -->
<xsl:template match="press_section">
<press_section>
<xsl:apply-templates select="node()"/>
<xsl:apply-templates select="../version"/>
</press_section>
</xsl:template>
<xsl:template match="version">
<version>
<xsl:apply-templates select="node()"/>
<xsl:apply-templates select="../task_info_press_section"/>
</version>
</xsl:template>
<xsl:template match="post_press_version">
<post_press_version>
<xsl:apply-templates select="node()"/>
<xsl:apply-templates select="../task_info_post_press"/>
</post_press_version>
</xsl:template>
<xsl:template match="task_info_press_section">
<task_info_press_section confirmed="{confirmed}" maintenance="{maintenance}" provisional="{provisional}">
<xsl:apply-templates select="node()"/>
<xsl:apply-templates select="../*[not(self::task_info_press_section)]"/>
</task_info_press_section>
</xsl:template>
<!-- nest all elements within order and create attributes -->
<xsl:template match="order">
<order job_id="{job_id}" site_code="{site_code}" replace="{Replace}">
<xsl:apply-templates select="node()"/>
<xsl:apply-templates select="../*[not(self::order) and not(self::version) and not(self::task_info_press_section) and not(self::task_info_post_press)]"/>
</order>
</xsl:template>
<!-- rename elements to specified name -->
<xsl:template match="task_info_press_section">
<xsl:element name="task_info">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="task_info_post_press">
<xsl:element name="task_info">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
여기에 XSLT 2가 있습니다.
<?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="*">
<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은 다음과 같습니다.
<?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:dataroot generated="2015-01-16T10:32:47">
<tg:order job_id="S019191-1" site_code="DG" replace="true">
<tg:job_description>TEST</tg:job_description>
<tg:order_qty>2000</tg:order_qty>
<tg:depth>10</tg:depth>
<tg:width>8</tg:width>
<tg:cover_pagination>4</tg:cover_pagination>
<tg:text_pagination>12</tg:text_pagination>
<tg:delivery_commence_date>15/1/2014</tg:delivery_commence_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: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>2000</tg:version_nett_qty>
</tg:master_version>
<tg:press_section>
<tg:signature_id>001</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>10 x 8</tg:trim_size>
<tg:version>
<tg:version_code>COMM</tg:version_code>
<tg:task_info>
<tg:task_sub_job_id>S019191-1-001COMM</tg:task_sub_job_id>
<tg:task_seq_id>0</tg:task_seq_id>
<tg:task_description>4pp Cover</tg:task_description>
<tg:task_qty_rqd>1500</tg:task_qty_rqd>
<tg:task_resource_id>1</tg:task_resource_id>
</tg:task_info>
<tg:task_info>
<tg:task_sub_job_id>S019191-1-001COMM</tg:task_sub_job_id>
<tg:task_seq_id>1</tg:task_seq_id>
<tg:task_description>6pp Cover</tg:task_description>
<tg:task_qty_rqd>500</tg:task_qty_rqd>
<tg:task_resource_id>1</tg:task_resource_id>
</tg:task_info>
</tg:version>
</tg:press_section>
<tg:press_section>
<tg:signature_id>001</tg:signature_id>
<tg:sequence_id>1</tg:sequence_id>
<tg:sequence_alpha>A</tg:sequence_alpha>
<tg:description>6pp Cover</tg:description>
<tg:pagination>6</tg:pagination>
<tg:trim_size>10 x8</tg:trim_size>
<tg:version>
<tg:version_code>COMM</tg:version_code>
<tg:task_info>
<tg:task_sub_job_id>S019191-1-001COMM</tg:task_sub_job_id>
<tg:task_seq_id>0</tg:task_seq_id>
<tg:task_description>4pp Cover</tg:task_description>
<tg:task_qty_rqd>1500</tg:task_qty_rqd>
<tg:task_resource_id>1</tg:task_resource_id>
</tg:task_info>
<tg:task_info>
<tg:task_sub_job_id>S019191-1-001COMM</tg:task_sub_job_id>
<tg:task_seq_id>1</tg:task_seq_id>
<tg:task_description>6pp Cover</tg:task_description>
<tg:task_qty_rqd>500</tg:task_qty_rqd>
<tg:task_resource_id>1</tg:task_resource_id>
</tg:task_info>
</tg:version>
</tg:press_section>
</tg:order>
</tg:dataroot>
</tg: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="S019191-1" site_code="DG" replace="true">
<tg:job_description>TEST</tg:job_description>
<tg:order_qty>2000</tg:order_qty>
<tg:depth>10</tg:depth>
<tg:width>8</tg:width>
<tg:cover_pagination>4</tg:cover_pagination>
<tg:text_pagination>12</tg:text_pagination>
<tg:delivery_commence_date>15/1/2014</tg:delivery_commence_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: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>2000</tg:version_nett_qty>
</tg:master_version>
<tg:press_section>
<tg:signature_id>001</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>10 x 8</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>S019191-1-001COMM</tg:task_sub_job_id>
<tg:task_seq_id>0</tg:task_seq_id>
<tg:task_description>4pp Cover</tg:task_description>
<tg:task_qty_rqd>1500</tg:task_qty_rqd>
<tg:task_resource_id>1</tg:task_resource_id>
</tg:task_info>
</tg:version>
</tg:press_section>
<tg:press_section>
<tg:signature_id>001</tg:signature_id>
<tg:sequence_id>1</tg:sequence_id>
<tg:sequence_alpha>A</tg:sequence_alpha>
<tg:description>6pp Cover</tg:description>
<tg:pagination>6</tg:pagination>
<tg:trim_size>10 x8</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>S019191-1-001COMM</tg:task_sub_job_id>
<tg:task_seq_id>1</tg:task_seq_id>
<tg:task_description>6pp Cover</tg:task_description>
<tg:task_qty_rqd>500</tg:task_qty_rqd>
<tg:task_resource_id>1</tg:task_resource_id>
</tg:task_info>
</tg:version>
</tg:press_section>
</tg:order>
</tg:orders>
이 같은 문제를 설명하여 입력 XML의 최소 버전을 게시 할 수 이름을 변경하고있다 그것에 대한 원하는 출력. –
@ LingamurthyCS가 질문을 편집했습니다. –