用于转换文本节点的 XSL
XSL for transformation of text node
有一个xml(例如xml被简化)
<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:strip-space elements="*"/>
从纯文本节点创建 <sometext>
个元素。
<xsl:template match="object/text()">
<sometext><xsl:value-of select="normalize-space(.)"/></sometext>
</xsl:template>
更新
任何元素的一般解决方案:
<xsl:template match="*[*|@*]/text()">
<sometext><xsl:value-of select="normalize-space(.)"/></sometext>
</xsl:template>
你可以试试:
<?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:strip-space elements="*"/>
<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:template match="*[@*]/text()">
<sometext><xsl:value-of select="normalize-space(.)"/></sometext>
</xsl:template>
</xsl:stylesheet>
有一个xml(例如xml被简化)
<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:strip-space elements="*"/>
从纯文本节点创建 <sometext>
个元素。
<xsl:template match="object/text()">
<sometext><xsl:value-of select="normalize-space(.)"/></sometext>
</xsl:template>
更新
任何元素的一般解决方案:
<xsl:template match="*[*|@*]/text()">
<sometext><xsl:value-of select="normalize-space(.)"/></sometext>
</xsl:template>
你可以试试:
<?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:strip-space elements="*"/>
<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:template match="*[@*]/text()">
<sometext><xsl:value-of select="normalize-space(.)"/></sometext>
</xsl:template>
</xsl:stylesheet>