Xml xslt:基于当前节点对以下同级进行条件更新

Xml xslt:基于当前节点对以下同级进行条件更新,xml,xslt,Xml,Xslt,我有如下XML文件: <?xml version="1.0" encoding="UTF-8"?> <Root> <Data> <D1_01>23</D1_01> <D1_03>2</D01_03> <D1_04>9</D01_04> <Record> <R9> <R9_01>-5<

我有如下XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
 <Data>
    <D1_01>23</D1_01>
    <D1_03>2</D01_03>
    <D1_04>9</D01_04>
    <Record>
        <R9>
        <R9_01>-5</R9_01>
        <R9_02>-5</R9_02>
        <R9_05>XSLT Document Function1</R9_05>
        <R9_11>-5</R9_11>
       </R9>

        <S>
        <S_01>CC= </S_01>
        </S>
     </Record>

   <Record>
        <R9>
        <R9_01>-5</R9_01>
        <R9_02>-5</R9_02>
        <R9_05>XSLT Document Function2</R9_05>
        <R9_11>-5</R9_11>
       </R9>

        <S>
        <S_01>CC= </S_01>
        </S>
     </Record>
      .
      .
      .
    </Data>
</Root>"

23
2.
9
-5
-5
XSLT文档功能1
-5
CC=
-5
-5
XSLT文档功能2
-5
CC=
.
.
.
"
对于每个记录检查(字符串长度(R9_05)>10),如果为真,则将R9_05的文本更改为“参考”,并将R9_05的文本附加到以下同级S_01

期望输出为:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
 <Data>
    <D1_01>23</D1_01>
    <D1_03>2</D01_03>
    <D1_08>8</D1_08>
    <Record>
        <R9>
        <R9_01>-5</R9_01>
        <R9_02>-5</R9_02>
        <R9_05>Reference</R9_05>
        <R9_11>-5</R9_11>
       </R9>

        <S>
        <S_01>CC=XSLT Document Function1 </S_01>
        </S>
     </Record>

   <Record>
        <R9>
        <R9_01>-5</R9_01>
        <R9_02>-5</R9_02>
        <R9_05>Reference</R9_05>
        <R9_11>-5</R9_11>
       </R9>

        <S>
        <S_01>CC=XSLT Document Function2 </S_01>
        </S>
     </Record>
      .
      .
      .
    </Data>
</Root>

23
2.
8.
-5
-5
参考文献
-5
CC=XSLT文档函数1
-5
-5
参考文献
-5
CC=XSLT文档函数2
.
.
.
下面是我的XSLT代码:

<xsl:template match="Root/Data">
   <xsl:for-each select="Record">
       <xsl:variable name="var_R9_05"> 
       <xsl:choose>
           <xsl:when test="string-length(R9/R9_05) &gt; 10">
               <xsl:value-of select="concat(following-sibling::S/S_01, ' ',  R9_05)"/>
           </xsl:when>
           <xsl:otherwise>
               <xsl:value-of select="//S_01"/>
           </xsl:otherwise>
       </xsl:choose>        
       </xsl:variable>     
                <xsl:element name="R9_05"> "See narrative for complaint"  </xsl:element>  
                <xsl:element name="S_01">                         
                    <xsl:call-template name="value-to-replace">                       
                    <xsl:with-param name="param.str" select="following-sibling::S"/>  
                    <xsl:with-param name="param.target" select="following-sibling::S/S_01"/>                       
                    <xsl:with-param name="param.replacement" select="$var_R9_05)"/>                   
                    </xsl:call-template>       
                </xsl:element> 
   </xsl:for-each>
</xsl:template>

“投诉请参见叙述”
没有得到想要的输出,我不熟悉XSLT和XML,有人能帮我吗?

怎么样:

XSLT1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="R9_05[string-length(.) > 10]">
    <R9_05>Reference</R9_05>
</xsl:template>

<xsl:template match="S_01/text()">
    <xsl:copy/>
    <xsl:value-of select="../../../R9/R9_05[string-length(.) > 10]"/>
</xsl:template>

</xsl:stylesheet>

参考文献
这可以改进,以便只执行一次测试。

如何:

XSLT1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="R9_05[string-length(.) > 10]">
    <R9_05>Reference</R9_05>
</xsl:template>

<xsl:template match="S_01/text()">
    <xsl:copy/>
    <xsl:value-of select="../../../R9/R9_05[string-length(.) > 10]"/>
</xsl:template>

</xsl:stylesheet>

参考文献

这可以改进,以便只执行一次测试。

您的XSLT处理器是否支持XSLT 2.0?--p.S。您的XML错误:不匹配。
。抱歉,这是一个键入错误。应该是您的XSLT处理器是否支持XSLT 2.0?--p.S。您的XML错误:
不匹配。
。抱歉,这是错误输入错误。应该是我想再添加一个条件,如(字符串长度(R9_06)>10),如果是真的,则将R9_06的文本更改为“引用”,并将R9_06的文本附加到以下相同的同级S_01。尝试了,但未获得所需的输出。我想再添加一个条件,如(字符串长度(R9_06)>10),如果为真,则将R9_06的文本更改为“参考”,并将R9_06的文本附加到相同的以下同级S_01。已尝试,但未获得所需的输出。