繁体   English   中英

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

[英]xslt to append (add suffix) to all ids and idref present in input xml

我必须在我的请求中添加或合并一个随机数(即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>

而不是这样做...

<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上查看实际运行情况

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM