-2
    <?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<Company>

    <EmployeeDetail>
<Employees>
        <name>Vishal</name> 
        <name>Ranvijay</name> 
        <name>Jagmit</name> 
</Employees>
<Employees>
        <name>Verma</name> 
        <name>Sahay</name> 
        <name>Singh</name> 
</Employees>
    </EmployeeDetail> 

</Company>

我想创建 xslt 来创建类似于以下内容的输出:

Vishal Verma
Ranvijay Sahay
Jagmit Singh

4

3 回答 3

0

这是否足够或订单是否重要?

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:output method="text"/>

    <xsl:template match="@*|node()">
        <xsl:apply-templates select="@*|node()" />
    </xsl:template>

    <xsl:template match="name">
        <xsl:value-of select="." /><xsl:text> </xsl:text>
    </xsl:template>
</xsl:stylesheet>
于 2013-09-12T13:45:59.677 回答
0

这个 XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output omit-xml-declaration="yes" indent="yes" method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/*">
    <xsl:apply-templates select="*/*[1]/*"/>
  </xsl:template>

  <xsl:template match="*">
    <xsl:variable name="vPos" select="position()"/>
    <xsl:if test="position() &gt; 1">&#160;</xsl:if>
    <xsl:value-of
      select="concat(., 
                     ' ',
                     ../following-sibling::*/*[position() = $vPos])"/>
  </xsl:template>

</xsl:stylesheet>

...当应用于您的原始 XML 时:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Edited by XMLSpy® -->
<Company>
  <EmployeeDetail>
    <Employees>
      <name>Vishal</name>
      <name>Ranvijay</name>
      <name>Jagmit</name>
    </Employees>
    <Employees>
      <name>Verma</name>
      <name>Sahay</name>
      <name>Singh</name>
    </Employees>
  </EmployeeDetail>
</Company>

...产生您想要的输出:

Vishal Verma Ranvijay Sahay Jagmit Singh

解释:

  • 第一个模板匹配顶级元素。找到它后,XSLT 处理器被指示将模板应用于第一个元素的所有子元素<Employees>
  • 第二个模板匹配任何元素(假设在 XSLT 中只有一个其他调用<xsl:apply-templates>,它匹配第一个元素的任何子<Employees>元素)。找到这样的元素后,处理器输出该当前元素的值、一个空格和相邻<name>元素的值(意思是,与<name>当前元素存在于相同位置但在第二个元素的上下文中的<Employees>元素)。
    • 注意使用<xsl:if test="position() &gt; 1">&#160;</xsl:if>- 这会输出一个空格,除非我们已经到达最后一个元素(从而防止尾随空格)。
于 2013-09-12T14:52:56.157 回答
0

尝试这个。

<xsl:for-each select="//Employees//name">
 <xsl:text><xsl:value-of select="."/></xsl:text>
 <xsl:if test="position() != last()" />
   <xsl:text> </xsl:text>
 </xsl:if>
</xsl:for-each>

我在 if 语句中的每个名称后添加了一个空格。if 语句应防止尾随空格。

于 2013-09-12T13:44:24.480 回答