使用双引号括起来的相同文本替换节点文本需要什么XSLT:
<users>
<user_info>
<lastname>Jenkins</lastname>
<firstname>Bob</firstname>
</user_info>
<user_info>
<lastname>Smith</lastname>
<firstname>Mike</firstname>
</user_info>
</users>
这是一个简化的视图,我的user_info结构有22个元素,所以我希望XSLT只需用双引号括起来的相同文本替换任何子元素文本值的文本:
<users>
<user_info>
<lastname>"Jenkins"</lastname>
<firstname>"Bob"</firstname>
</user_info>
<user_info>
<lastname>"Smith"</lastname>
<firstname>"Mike"</firstname>
</user_info>
</users>
我可以基于每个子元素来做逻辑,但这很乏味。我对如何在user_info节点列表级别进行迭代感到困惑。像往常一样,答案可能非常简单:)感谢您的帮助。
答案 0 :(得分:3)
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vQ">"</xsl:variable>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="user_info/*/text()">
<xsl:value-of select="concat($vQ, ., $vQ)"/>
</xsl:template>
<xsl:template match="user_info/*[not(node())]">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:value-of select="concat($vQ, $vQ)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于此XML文档时:
<users>
<user_info>
<lastname>Jenkins</lastname>
<firstname>Bob</firstname>
<address2></address2>
</user_info>
<user_info>
<lastname>Smith</lastname>
<firstname>Mike</firstname>
</user_info>
</users>
产生想要的结果:
<users>
<user_info>
<lastname>"Jenkins"</lastname>
<firstname>"Bob"</firstname>
<address2>""</address2>
</user_info>
<user_info>
<lastname>"Smith"</lastname>
<firstname>"Mike"</firstname>
</user_info>
</users>
答案 1 :(得分:-1)
我不是100%确定user_info//text()
选择器,但我认为这样可行:
<xsl:template match="user_info//text()">
<xsl:text>"</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>