有一个XML(用于XML被简化的实例中)XSL文本节点的变换
<object attr1="1" attr2="2">
xxxxxxxxx
<someattrs>
<someattr1>a</someattr1>
<someattr2>b</someattr2>
<someattr3>c</someattr3>
<someattr4 attr3="3">
yyyyyyy
<someattr5>d</someattr5>
<someattr6>e</someattr6>
<someattr7 attr8="f">
<![CDATA[ zzzzzzz zzzzzz zzzzzz zzzzzzzzzzzz ]]>
</someattr7>
</someattr4>
</someattrs>
</object>
随着XLS变换其目的是要变换具有属性成元素为中心的XML任何XML :
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:element name="{name()}"><xsl:value-of select="."/></xsl:element>
</xsl:template>
</xsl:stylesheet>
的XML变换成
<?xml version="1.0" encoding="UTF-8"?>
<object>
<attr1>1</attr1>
<attr2>2</attr2>
xxxxxxxxx
<someattrs>
<someattr1>a</someattr1>
<someattr2>b</someattr2>
<someattr3>c</someattr3>
<someattr4>
<attr3>3</attr3>
yyyyyyy
<someattr5>d</someattr5>
<someattr6>e</someattr6>
<someattr7>
<attr8>f</attr8>
zzzzzzz zzzzzz zzzzzz zzzzzzzzzzzz
</someattr7>
</someattr4>
</someattrs>
</object>
问题是任何出现在源xml中的自由文本()都没有放入它自己的标记中(让我们将所有自由文本放入名称为“sometext”的元素)放入最终xml中。文本“xxxxxxxxx”应该在其自己的标签<sometext>xxxxxxxxx</sometext>
中,“yyyyyyy”应该在其自己的标签<sometext>yyyyyyy</sometext>
中。
什么是转换以获得以下XML?
<?xml version="1.0" encoding="UTF-8"?>
<object>
<attr1>1</attr1>
<attr2>2</attr2>
<sometext>xxxxxxxxx</sometext>
<someattrs>
<someattr1>a</someattr1>
<someattr2>b</someattr2>
<someattr3>c</someattr3>
<someattr4>
<attr3>3</attr3>
<sometext>yyyyyyy</sometext>
<someattr5>d</someattr5>
<someattr6>e</someattr6>
<someattr7>
<attr8>f</attr8>
<sometext>zzzzzzz zzzzzz zzzzzz zzzzzzzzzzzz</sometext>
</someattr7>
</someattr4>
</someattrs>
</object>
泰为带状空间。 :) xsl不能在匹配中使用“object”,因为source xml不仅包含对象节点中的文本:(。 XSL:模板>'无 ”(。)对象“ 给出:'.... 一个 b ...'这是因为过多它应该是'一个 b '。 –
Willmore
如何区分必须包含在''中的文本? –
dlask
如果元素具有“文本”和子元素,则文本应显示为元素“文本 。