【问题标题】:How to get the children values dynamically using XSLT如何使用 XSLT 动态获取子值
【发布时间】:2015-08-24 09:47:03
【问题描述】:

我有以下 xml:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <row>
      <first-name>John</first-name>
      <last-name>Miller</last-name>
      <address>Birmingham</address>
   </row>
   <row>
      <first-name>Rose</first-name>
      <last-name>Miller</last-name>
      <address>New York</address>
   </row>
</root>

我想使用 XSLT 修改 xml,这样我的输出如下:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <row>
      <Name>John-Miller</Name>
      <address>Birmingham</address>
   </row>
   <row>
      <Name>Rose-Miller</Name>
      <address>New York</address>
   </row>
</root>

总而言之,我想连接&lt;first-name&gt;&lt;last-name&gt; 以生成一个名为&lt;Name&gt; 的新节点,并保持&lt;address&gt; 标记不变(每个&lt;row&gt; 都应该发生同样的事情)。

我正在尝试使用以下 XSLT,但没有获得所需的输出:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:template match="node() | @*">
      <xsl:copy>
         <xsl:apply-templates select="node() | @*" />
      </xsl:copy>
   </xsl:template>
   <xsl:template match="row">
      <row>
         <Name>
            <xsl:value-of select="concat(//first-name,'-',//last-name)" />
         </Name>
      </row>
   </xsl:template>
</xsl:stylesheet>

当我针对我的输入 xml 运行上述 XSLT 时,我只得到第一行的 &lt;first-name&gt;&lt;last-name&gt; 值。 能否提供解决方案?

【问题讨论】:

  • 在您的预期输出中,为什么第二行元素包含 john-miller..不应该是 Rose-Miller 吗??
  • @Saurav 对不起..错字...你是对的..现在更新了问题..谢谢.. :)

标签: xml xslt


【解决方案1】:

您需要使用相对路径,这意味着您需要将&lt;xsl:value-of select="concat(//first-name,'-',//last-name)" /&gt; 替换为&lt;xsl:value-of select="concat(first-name,'-',last-name)" /&gt;。您还需要确保复制地址:

   <xsl:template match="row">
      <row>
         <Name>
            <xsl:value-of select="concat(first-name,'-',last-name)" />
         </Name>
         <xsl:copy-of select="address"/>
      </row>
   </xsl:template>

【讨论】:

  • 完美...+1 快速解决方案。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多