XSLT帮助将单个节点拆分为节点集合

XSLT帮助将单个节点拆分为节点集合,xslt,Xslt,我有一个XML,看起来像 <?xml version="1.0"?> <ROWSET> <ROW> <AAA_ID>43238</AAA_ID> <BBB_ID>9</BBB_ID> <CCC_COURIER>2</CCC_COURIER> <CCC_FAX>33.44</CCC_FAX> <CCC_COFFEE>9</CCC

我有一个XML,看起来像

<?xml version="1.0"?>
<ROWSET>
 <ROW>
  <AAA_ID>43238</AAA_ID>
  <BBB_ID>9</BBB_ID>
  <CCC_COURIER>2</CCC_COURIER>
  <CCC_FAX>33.44</CCC_FAX>
  <CCC_COFFEE>9</CCC_COFFEE>
  <CCC_MARSBARS>3000.43</CCC_MARSBARS>
 </ROW>
 <ROW>
  <AAA_ID>43238</AAA_ID>
  <BBB_ID>10</BBB_ID>
 </ROW>
 <ROW>
  <AAA_ID>43238</AAA_ID>
  <BBB_ID>11</BBB_ID>
 </ROW>
 <ROW>
  <AAA_ID>43238</AAA_ID>
  <BBB_ID>12</BBB_ID>
  <CCC_MISC>5</CCC_MISC>
 </ROW>
</ROWSET>
现在我没有XSL经验,但我做得不太差,但我最大的绊脚石是如何分割CCC????将节点向上划分为各个节点,并将????将值编码到它自己的节点中


任何和所有的帮助都会被极度接受

可以使用
开头-with()
子字符串()
将节点
名称()
分割成若干部分。

这是非常直接的转换:

<xsl:stylesheet 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="*[starts-with(name(),'CCC_')]">
        <CCC>
            <CODE>
                <xsl:value-of select="substring-after(name(),'CCC_')"/>
            </CODE>
            <AMOUNT>
                <xsl:value-of select="."/>
            </AMOUNT>
        </CCC>
    </xsl:template>
</xsl:stylesheet>

注意:按原样复制输入的标识规则。正在覆盖名称以“CCC”开头的元素的标识规则。

@PoweredByPorkers:你很好!随时问。
<xsl:stylesheet 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="*[starts-with(name(),'CCC_')]">
        <CCC>
            <CODE>
                <xsl:value-of select="substring-after(name(),'CCC_')"/>
            </CODE>
            <AMOUNT>
                <xsl:value-of select="."/>
            </AMOUNT>
        </CCC>
    </xsl:template>
</xsl:stylesheet>
<ROWSET>
    <ROW>
        <AAA_ID>43238</AAA_ID>
        <BBB_ID>9</BBB_ID>
        <CCC>
            <CODE>COURIER</CODE>
            <AMOUNT>2</AMOUNT>
        </CCC>
        <CCC>
            <CODE>FAX</CODE>
            <AMOUNT>33.44</AMOUNT>
        </CCC>
        <CCC>
            <CODE>COFFEE</CODE>
            <AMOUNT>9</AMOUNT>
        </CCC>
        <CCC>
            <CODE>MARSBARS</CODE>
            <AMOUNT>3000.43</AMOUNT>
        </CCC>
    </ROW>
    <ROW>
        <AAA_ID>43238</AAA_ID>
        <BBB_ID>10</BBB_ID>
    </ROW>
    <ROW>
        <AAA_ID>43238</AAA_ID>
        <BBB_ID>11</BBB_ID>
    </ROW>
    <ROW>
        <AAA_ID>43238</AAA_ID>
        <BBB_ID>12</BBB_ID>
        <CCC>
            <CODE>MISC</CODE>
            <AMOUNT>5</AMOUNT>
        </CCC>
    </ROW>
</ROWSET>