XSLT 用封闭的文本值替换元素文本

Wal*_*chi 2 xslt

用双引号括起来的相同文本替换节点的文本需要什么 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 节点列表级别进行迭代感到困惑。像往常一样,答案可能很简单:) 感谢您的帮助。

Dim*_*hev 5

这种转变

<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)