用双引号括起来的相同文本替换节点的文本需要什么 XSLT:
<users>
<user_info>
<lastname>Jenkins</lastname>
<firstname>Bob</firstname>
</user_info>
<user_info>
<lastname>Smith</lastname>
<firstname>Mike</firstname>
</user_info>
</users>
Run Code Online (Sandbox Code Playgroud)
这是一个简化视图,我的 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>
Run Code Online (Sandbox Code Playgroud)
我可以在每个子元素的基础上执行逻辑,但这很乏味。我对如何在 user_info 节点列表级别进行迭代感到困惑。像往常一样,答案可能很简单:) 感谢您的帮助。
这种转变:
<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>
Run Code Online (Sandbox Code Playgroud)
应用于此 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>
Run Code Online (Sandbox Code Playgroud)
产生想要的结果:
<users>
<user_info>
<lastname>"Jenkins"</lastname>
<firstname>"Bob"</firstname>
<address2>""</address2>
</user_info>
<user_info>
<lastname>"Smith"</lastname>
<firstname>"Mike"</firstname>
</user_info>
</users>
Run Code Online (Sandbox Code Playgroud)