-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 を作成して、次のような出力を作成したいと考えています。

ヴィシャル ヴェルマ
ランビジェイ サハイ
ジャグミット シン

4

3 に答える 3

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>要素のすべての子要素にテンプレートを適用するように指示されます。
  • 2 番目のテンプレートは、任意の要素に一致します (XSLT 内に他の呼び出しが 1 つしかない場合<xsl:apply-templates>、最初の要素の任意の子要素に一致します<Employees>)。そのような要素を見つけると、プロセッサはその現在の要素の値、スペース、および隣接する<name>要素 (つまり、<name>現在の要素と同じ位置にあるが、2 番目の<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 に答える