我的输入XML看起来像 -
<ROWS>
<ROW>
<ROW_NUMBER>001</ROW_NUMBER>
<ARTICLE>
<ARTICLE_ID>Q2D110914</ARTICLE_ID>
<ARTICLE_NAME>A_Name</ARTICLE_NAME>
</ARTICLE>
<PRICE_PER_UNIT>
<AMOUNT SIGN="+">19</AMOUNT>
</PRICE_PER_UNIT>
</ROW>
<ROW ROW_TYPE="QTY">
<QUANTITY>
<ORDERED Q_UNIT="VB" SIGN="+">20</ORDERED>
</QUANTITY>
</ROW>
<ROW ROW_TYPE="PID">
<ARTICLE>
<ARTICLE_DESCRIPTIONS>
<ARTICLE_DESCRIPTION>
<DESCRIPTION_TYPE>A_Description</DESCRIPTION_TYPE>
</ARTICLE_DESCRIPTION>
</ARTICLE_DESCRIPTIONS>
</ARTICLE>
</ROW>
</ROWS>
所需的输出应该是这样的 -
<ROWS>
<ROW>
<ROW_NUMBER>001</ROW_NUMBER>
<ARTICLE>
<ARTICLE_ID>Q2D110914</ARTICLE_ID>
<ARTICLE_NAME>A_Name</ARTICLE_NAME>
<ARTICLE_DESCRIPTIONS>
<ARTICLE_DESCRIPTION>
<DESCRIPTION_TYPE>A_Description</DESCRIPTION_TYPE>
</ARTICLE_DESCRIPTION>
</ARTICLE_DESCRIPTIONS>
</ARTICLE>
<QUANTITY>
<ORDERED Q_UNIT="VB" SIGN="+">20</ORDERED>
</QUANTITY>
<PRICE_PER_UNIT>
<AMOUNT SIGN="+">19</AMOUNT>
</PRICE_PER_UNIT>
</ROW>
</ROWS>
我尝试使用'following ::'xpath但是没有得到所需的输出。它需要通过xslt 1.0重组和合并xml数据。有什么建议吗?
答案 0 :(得分:0)
以下转换在应用于样本输入时会生成所需的输出结构。但它的格式还不是很好。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>
<xsl:template match="ROW[@ROW_TYPE]" />
<xsl:template match="ROW[not(@ROW_TYPE)]">
<xsl:copy>
<xsl:copy-of select="ROW_NUMBER" />
<xsl:apply-templates select="ARTICLE" />
<xsl:apply-templates select="following::ROW[@ROW_TYPE='QTY'][1]/QUANTITY" />
<xsl:copy-of select="PRICE_PER_UNIT" />
</xsl:copy>
</xsl:template>
<xsl:template match="ARTICLE">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
<xsl:copy-of select="following::ARTICLE[1]/ARTICLE_DESCRIPTIONS" />
</xsl:copy>
</xsl:template>
</xsl:transform>