xml - 连接几个节点 xsl

标签 xml xslt

我的 XML:

<?xml version="1.0"?>
<Result>
   <Answer questionId="Servicios">Auditoría|Asesoría en Impuestos|</Answer>
   <Answer questionId="Servicios">Auditoría|Outsourcing|Asesoría en RRHH|</Answer>
</Result>

我想连接每个 node()使用 <xsl:variable name = "var"/> 进入 UNIQUE 变量(例如 xsl:for-each)或类似的东西,然后计算“|”字符使用这个:

<xsl:variable name="total" select="string-length(string($var))-string-length(translate(string($var),'|',''))"/>

如果我这样做:

    <xsl:value-of select ="//Result/Answer[@questionId = 'Servicios']//text()"/>
<!--The return is something like an array-->
<!--[1]Auditoría|Asesoría en Impuestos|-->
<!--[2]Auditoría|Outsourcing|Asesoría en RRHH|-->
<!--and the result is '2' it only select the [1] and i need all of them, [1] and [2] in this case-->

我认为我必须将所有值与 xsl:for-each 连接起来

我正在使用 xslt version="1.0"

如有任何帮助,我将不胜感激! 谢谢!

最佳答案

产生所需结果的最短/最简单的 XSLT 转换(Answer 元素的字符串值的串联)是这样的:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
  <xsl:value-of select="."/>
 </xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<Result>
    <Answer questionId="Servicios">Auditoría|Asesoría en Impuestos|</Answer>
    <Answer questionId="Servicios">Auditoría|Outsourcing|Asesoría en RRHH|</Answer>
</Result>

产生了完全想要的、正确的结果:

Auditoría|Asesoría en Impuestos|Auditoría|Outsourcing|Asesoría en RRHH|

解释:

  1. 根节点的字符串值/是其所有文本节点后代的串联。

  2. <xsl:strip-space elements="*"/>指令从 XML 文档中删除所有不需要的纯空白文本节点。

更新:如果 XML 文档比提供的文档更复杂并且需要进行一些过滤,这里是一个通用且简单的解决方案,使用相同的想法:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:variable name="vStrings">
  <xsl:copy-of select="/*/*[@questionId='Servicios']"/>
 </xsl:variable>

 <xsl:template match="/">
  <xsl:value-of select="$vStrings"/>
 </xsl:template>
</xsl:stylesheet>

应用于此 XML 文档时(请注意,我们必须排除第二个 <Answer> ):

<Result>
    <Answer questionId="Servicios">Auditoría|Asesoría en Impuestos|</Answer>
    <Answer questionId="X">Auditoría|Outsourcing|Asesoría en RRHH|</Answer>
    <Answer questionId="Servicios">Auditoría|Outsourcing|Asesoría en RRHH|</Answer>
</Result>

再次产生了想要的、正确的结果:

Auditoría|Asesoría en Impuestos|Auditoría|Outsourcing|Asesoría en RRHH|

关于xml - 连接几个节点 xsl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5783591/

相关文章:

java - Apache Camel - 从 XML 获取 xpath 值

java - 带有空属性的 XML 解析 (Android)

xml - 如何为带有属性的 Xml 嵌套节点编写样式表?

xslt - 如何使用 JDOM2 转换带有 CDATA 的 XML 文档?

xml - 提取标签名称、属性及其值

xml - 我可以使用 powershell 挂载 xml 文件吗

c++ - 非常简单的 C/C++ XML 解析器

c# - 在 XML 中添加没有 xml 元素的纯文本

java - 合并 2 个具有相同元素的 XML 文件并将 id 分配给唯一的项目

java - XML 转换失败