xslt追加(添加后缀)到输入xml中的所有id和idref

时间:2018-01-18 11:51:09

标签: xml xslt

我必须在我的请求中附加或连接一个随机数,即6869到太多的id和idref。

实际请求包含数千行,其中有许多ID。

样品申请:

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <jsonObject>
            <_JsonReader_PS_id>1</_JsonReader_PS_id>
            <Children>              
                <Parent>
                    <_JsonReader_PS_ref>1</_JsonReader_PS_ref>
                </Parent>
            </Children>
            <Children>
                <_JsonReader_PS_id>4</_JsonReader_PS_id>

                <?xml-multiple  Children?>
                <Children>
                    <_JsonReader_PS_id>5</_JsonReader_PS_id>                    
                    <Instance>
                        <_JsonReader_PS_id>6</_JsonReader_PS_id>                        
                        <?xml-multiple  Children?>
                        <Children>
                            <_JsonReader_PS_id>7</_JsonReader_PS_id>                            
                            <?xml-multiple  Children?>
                            <Children>
                                <_JsonReader_PS_id>8</_JsonReader_PS_id>                                
                                <?xml-multiple  Children?>
                                <Parent>
                                    <_JsonReader_PS_ref>7</_JsonReader_PS_ref>
                                </Parent>
                            </Children>
                            <Children>
                                <_JsonReader_PS_id>10</_JsonReader_PS_id>                               
                                <?xml-multiple  Children?>
                                <Parent>
                                    <_JsonReader_PS_ref>7</_JsonReader_PS_ref>
                                </Parent>
                            </Children>
                            <Children>
                                <_JsonReader_PS_id>12</_JsonReader_PS_id>                               
                                <?xml-multiple  Children?>
                                <Parent>
                                    <_JsonReader_PS_ref>7</_JsonReader_PS_ref>
                                </Parent>
                                </Children>
                            <Children>
                                <_JsonReader_PS_id>14</_JsonReader_PS_id>                               
                                <?xml-multiple  Children?>
                                <Parent>
                                    <_JsonReader_PS_ref>7</_JsonReader_PS_ref>
                                </Parent>
                            </Children>
                            <Children>
                                <_JsonReader_PS_id>16</_JsonReader_PS_id>                               
                                <?xml-multiple  Children?>
                                <Parent>
                                    <_JsonReader_PS_ref>7</_JsonReader_PS_ref>
                                </Parent>
                            </Children>
                            <Parent>
                                <_JsonReader_PS_ref>6</_JsonReader_PS_ref>
                            </Parent>
                        </Children>
                        <Parent>
                            <_JsonReader_PS_ref>5</_JsonReader_PS_ref>
                        </Parent>
                        </Instance>
                    <Guid>b5c75f37-6381-45f8-806b-c22a49ab6962</Guid>
                    <?xml-multiple  Children?>
                    <Parent>
                        <_JsonReader_PS_ref>4</_JsonReader_PS_ref>
                    </Parent>
                    </Children>
                <Parent>
                    <_JsonReader_PS_ref>1</_JsonReader_PS_ref>
                </Parent>
            </Children>
            <Children>
                <_JsonReader_PS_id>19</_JsonReader_PS_id>               
                <?xml-multiple  Children?>
                <Parent>
                    <_JsonReader_PS_ref>1</_JsonReader_PS_ref>
                </Parent></Children>
            <Children>
                <_JsonReader_PS_id>21</_JsonReader_PS_id>               
                <?xml-multiple  Children?>
                <Parent>
                    <_JsonReader_PS_ref>1</_JsonReader_PS_ref>
                </Parent>
                </Children>
            <Children>
                <_JsonReader_PS_id>23</_JsonReader_PS_id>               
                <?xml-multiple  Children?>
                <Parent>
                    <_JsonReader_PS_ref>1</_JsonReader_PS_ref>
                </Parent>
            </Children>
        </jsonObject>
    </soapenv:Body>
</soapenv:Envelope>

期望的输出:

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <jsonObject>
            <_JsonReader_PS_id>16869</_JsonReader_PS_id>
            <Children>              
                <Parent>
                    <_JsonReader_PS_ref>16869</_JsonReader_PS_ref>
                </Parent>
            </Children>
            <Children>
                <_JsonReader_PS_id>46869</_JsonReader_PS_id>

                <?xml-multiple  Children?>
                <Children>
                    <_JsonReader_PS_id>56869</_JsonReader_PS_id>                    
                    <Instance>
                        <_JsonReader_PS_id>66869</_JsonReader_PS_id>                        
                        <?xml-multiple  Children?>
                        <Children>
                            <_JsonReader_PS_id>76869</_JsonReader_PS_id>                            
                            <?xml-multiple  Children?>
                            <Children>
                                <_JsonReader_PS_id>86869</_JsonReader_PS_id>                                
                                <?xml-multiple  Children?>
                                <Parent>
                                    <_JsonReader_PS_ref>76869</_JsonReader_PS_ref>
                                </Parent>
                            </Children>
                            <Children>
                                <_JsonReader_PS_id>106869</_JsonReader_PS_id>                               
                                <?xml-multiple  Children?>
                                <Parent>
                                    <_JsonReader_PS_ref>76869</_JsonReader_PS_ref>
                                </Parent>
                            </Children>
                            <Children>
                                <_JsonReader_PS_id>126869</_JsonReader_PS_id>                               
                                <?xml-multiple  Children?>
                                <Parent>
                                    <_JsonReader_PS_ref>76869</_JsonReader_PS_ref>
                                </Parent>
                                </Children>
                            <Children>
                                <_JsonReader_PS_id>146869</_JsonReader_PS_id>                               
                                <?xml-multiple  Children?>
                                <Parent>
                                    <_JsonReader_PS_ref>76869</_JsonReader_PS_ref>
                                </Parent>
                            </Children>
                            <Children>
                                <_JsonReader_PS_id>166869</_JsonReader_PS_id>                               
                                <?xml-multiple  Children?>
                                <Parent>
                                    <_JsonReader_PS_ref>76869</_JsonReader_PS_ref>
                                </Parent>
                            </Children>
                            <Parent>
                                <_JsonReader_PS_ref>66869</_JsonReader_PS_ref>
                            </Parent>
                        </Children>
                        <Parent>
                            <_JsonReader_PS_ref>56869</_JsonReader_PS_ref>
                        </Parent>
                        </Instance>
                    <Guid>b5c75f37-6381-45f8-806b-c22a49ab6962</Guid>
                    <?xml-multiple  Children?>
                    <Parent>
                        <_JsonReader_PS_ref>46869</_JsonReader_PS_ref>
                    </Parent>
                    </Children>
                <Parent>
                    <_JsonReader_PS_ref>16869</_JsonReader_PS_ref>
                </Parent>
            </Children>
            <Children>
                <_JsonReader_PS_id>196869</_JsonReader_PS_id>               
                <?xml-multiple  Children?>
                <Parent>
                    <_JsonReader_PS_ref>16869</_JsonReader_PS_ref>
                </Parent></Children>
            <Children>
                <_JsonReader_PS_id>216869</_JsonReader_PS_id>               
                <?xml-multiple  Children?>
                <Parent>
                    <_JsonReader_PS_ref>16869</_JsonReader_PS_ref>
                </Parent>
                </Children>
            <Children>
                <_JsonReader_PS_id>236869</_JsonReader_PS_id>               
                <?xml-multiple  Children?>
                <Parent>
                    <_JsonReader_PS_ref>16869</_JsonReader_PS_ref>
                </Parent>
            </Children>
        </jsonObject>
    </soapenv:Body>
</soapenv:Envelope>

xslt我尝试但未能产生所需的输出。它无法访问xpath字段的值

<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="*"/>

    <xsl:key name="id" match="ID" use="." />

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

            <xsl:template match="//_JsonReader_PS_id">
                <xsl:copy>        
                    <xsl:value-of select="concat(//_JsonReader_PS_id, '6869')"/> 
                </xsl:copy>
            </xsl:template>

            <xsl:template match="_JsonReader_PS_ref">
                <xsl:copy>
                    <xsl:value-of select="concat(//_JsonReader_PS_ref, '6869')"/>         
                </xsl:copy>
            </xsl:template>

    </xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

而不是这样做......

<xsl:template match="//_JsonReader_PS_id">
   <xsl:copy>        
      <xsl:value-of select="concat(//_JsonReader_PS_id, '6869')"/> 
   </xsl:copy>
</xsl:template>

这样做......

<xsl:template match="_JsonReader_PS_id">
    <xsl:copy>        
        <xsl:value-of select="concat(., '6869')"/> 
    </xsl:copy>
</xsl:template>

.表示您刚刚匹配的当前节点。 (执行//_JsonReader_PS_id获取文档中的所有_JsonReader_PS_id,而不仅仅是您匹配的文档。当您将其放入concat语句时,它将只使用文档中的第一个)。

同样适用于其他模板

<xsl:template match="_JsonReader_PS_ref">
    <xsl:copy>
        <xsl:value-of select="concat(., '6869')"/>         
    </xsl:copy>
</xsl:template>

实际上,这两个模板可以组合成一个

<xsl:template match="_JsonReader_PS_id|_JsonReader_PS_ref">
    <xsl:copy>
        <xsl:value-of select="concat(., '6869')"/>         
    </xsl:copy>
</xsl:template>

http://xsltfiddle.liberty-development.net/948Fn5d

中查看此操作