我有一个XML,其中input元素将包含100个字符或更多
输入XML
<?xml version="1.0" encoding="UTF-8" ?>
<process xmlns="http://xmlns.oracle.com/TEST/TEST_XSLT/BPEL">
<input>abcdefghijlnskdckscksncksckscnkscnkscnksdcnksnc</input>
</process>
我的要求是为每5个字符转换和创建新节点。
<?xml version = '1.0' encoding = 'UTF-8'?>
<client:processResponse xmlns:client="http://xmlns.oracle.com/TEST/TEST_XSLT/BPEL">
<ns1:Segment-MSG xmlns:ns1="http://schemas.oracle.com/service/bpel/common">
<ns1:Element-127>acfsd</ns1:Element-127>
</ns1:Segment-MSG>
<ns1:Segment-MSG xmlns:ns1="http://schemas.oracle.com/service/bpel/common">
<ns1:Element-127>serfg</ns1:Element-127>
</ns1:Segment-MSG>
<ns1:Segment-MSG xmlns:ns1="http://schemas.oracle.com/service/bpel/common">
<ns1:Element-127>hjukl</ns1:Element-127>
</ns1:Segment-MSG>
<ns1:Segment-MSG xmlns:ns1="http://schemas.oracle.com/service/bpel/common">
<ns1:Element-127>tyuio</ns1:Element-127>
</ns1:Segment-MSG>
.
.
.
.
</client:processResponse>
请帮我解决这个转变。
由于 亚坦
答案 0 :(得分:1)
假设您仅限于XSLT 1.0,请尝试:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:client="http://xmlns.oracle.com/TEST/TEST_XSLT/BPEL"
xmlns:ns1="http://schemas.oracle.com/service/bpel/common">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/client:process">
<client:processResponse>
<xsl:call-template name="split-string">
<xsl:with-param name="string" select="client:input"/>
</xsl:call-template>
</client:processResponse>
</xsl:template>
<xsl:template name="split-string">
<xsl:param name="string"/>
<xsl:param name="length" select="5"/>
<ns1:Segment-MSG>
<ns1:Element-127>
<xsl:value-of select="substring($string, 1, $length)"/>
</ns1:Element-127>
</ns1:Segment-MSG>
<xsl:if test="string-length($string) > $length">
<!-- recursive call -->
<xsl:call-template name="split-string">
<xsl:with-param name="string" select="substring($string, $length + 1)"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
当应用于提供的输入时,结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<client:processResponse xmlns:client="http://xmlns.oracle.com/TEST/TEST_XSLT/BPEL" xmlns:ns1="http://schemas.oracle.com/service/bpel/common">
<ns1:Segment-MSG>
<ns1:Element-127>abcde</ns1:Element-127>
</ns1:Segment-MSG>
<ns1:Segment-MSG>
<ns1:Element-127>fghij</ns1:Element-127>
</ns1:Segment-MSG>
<ns1:Segment-MSG>
<ns1:Element-127>lnskd</ns1:Element-127>
</ns1:Segment-MSG>
<ns1:Segment-MSG>
<ns1:Element-127>cksck</ns1:Element-127>
</ns1:Segment-MSG>
<ns1:Segment-MSG>
<ns1:Element-127>sncks</ns1:Element-127>
</ns1:Segment-MSG>
<ns1:Segment-MSG>
<ns1:Element-127>ckscn</ns1:Element-127>
</ns1:Segment-MSG>
<ns1:Segment-MSG>
<ns1:Element-127>kscnk</ns1:Element-127>
</ns1:Segment-MSG>
<ns1:Segment-MSG>
<ns1:Element-127>scnks</ns1:Element-127>
</ns1:Segment-MSG>
<ns1:Segment-MSG>
<ns1:Element-127>dcnks</ns1:Element-127>
</ns1:Segment-MSG>
<ns1:Segment-MSG>
<ns1:Element-127>nc</ns1:Element-127>
</ns1:Segment-MSG>
</client:processResponse>
这与您指定的结果不同,但我认为是正确的。