我是XSLT的新手,所以这可能是基本的,但我真的很感激一些输入。我需要将父标记值复制到较低的节点,并替换子标记的值。
所以我的初始XML是
<?xml version="1.0"?>
<Header>
<expand>names,schema</expand>
<total>579</total>
<maxResults>1</maxResults>
<issues>
<expand>test1</expand>
<self>test2</self>
<id>19988</id>
<fields>
<summary>Getting error when trying to complete Return Item Processing in FBCDAT</summary>
<issuetype>
<name>Functionality</name>
<self>abc</self>
<description>An issue within the functionality</description>
<id>9</id>
</issuetype>
</fields>
</issues>
</Header>
我的要求是,
<id>19988</id>
复制到字段级别。<id>9</id>
下的<issuetype>
替换为<id>19988</id>
所以预期的XML是
<?xml version="1.0"?>
<Header>
<expand>names,schema</expand>
<total>579</total>
<maxResults>1</maxResults>
<issues>
<expand>test1</expand>
<self>test2</self>
<id>19988</id>
<fields>
<id>19988</id>
<summary>Getting error when trying to complete Return Item Processing in FBCDAT</summary>
<issuetype>
<name>Functionality</name>
<self>abc</self>
<description>An issue within the functionality</description>
<id>19988</id>
</issuetype>
</fields>
</issues>
</Header>
任何帮助将不胜感激。
先谢谢。
答案 0 :(得分:0)
从身份模板开始
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
要将id
字段复制到fields
元素,您需要一个匹配fields
的模板来完成工作...
<xsl:template match="fields">
<xsl:copy>
<xsl:copy-of select="../id" />
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
要替换id
下的issuetype
,还有另一个模板......
<xsl:template match="issuetype/id">
<xsl:copy-of select="../../../id" />
</xsl:template>
完全放下这个....
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="fields">
<xsl:copy>
<xsl:copy-of select="../id" />
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="issuetype/id">
<xsl:copy-of select="../../../id" />
</xsl:template>
</xsl:stylesheet>