如何使用for循环处理xslt中具有相同名称但不同属性值的xml标记

时间:2014-02-19 15:10:48

标签: xml xslt xslt-1.0

XML

<?xml version='1.0'  encoding='UTF-8' ?>
<?xml-stylesheet type="text/xsl" href="Sampletest.xsl"?>
<RESULTS>
    <ROW>
        <COLUMN NAME="System_Id">Saranya</COLUMN>
        <COLUMN NAME="Case_ID">1234</COLUMN>
        <COLUMN NAME="Case_Submitter_ID">samandav</COLUMN>
    </ROW>
    <ROW>
        <COLUMN NAME="System_Id">Gayathri</COLUMN>
        <COLUMN NAME="Case_ID">5678</COLUMN>
        <COLUMN NAME="Case_Submitter_ID">garaghur</COLUMN>  
    </ROW>
</RESULTS>

XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:for-each select="//ROW">
<businessobject>
     <fulltext>
             <title><xsl:value-of select="//COLUMN[@NAME='Title']"/></title>
             <id><xsl:value-of select="//COLUMN[@NAME='Case_ID']"/></id>
             <nccode><xsl:value-of select="//COLUMN[@NAME='System_Id']"/></nccode>
     </fulltext>
</businessobject>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

我在使用for循环获取不同行的值时遇到问题,我得到所有行中第一行的值。我正在尝试从XML中获取所有行的值。任何人都可以帮助我。 在此先感谢:)

2 个答案:

答案 0 :(得分:2)

以这种方式尝试:

<xsl:template match="/">
    <xsl:for-each select="RESULTS/ROW">
      <businessobject>
        <fulltext>
             <title><xsl:value-of select="COLUMN[@NAME='Title']"/></title>
             <id><xsl:value-of select="COLUMN[@NAME='Case_ID']"/></id>
         <nccode><xsl:value-of select="COLUMN[@NAME='System_Id']"/></nccode>
        </fulltext>
      </businessobject>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

请注意,输入示例中没有COLUMN [@ NAME ='Title']。

答案 1 :(得分:0)

在XPath中使用//意味着:通过完整文件搜索所有这些元素。如果可以,您应该始终使用/

变化:

<xsl:value-of select="//COLUMN[@NAME='Title']"/>

要:

<xsl:value-of select="COLUMN[@NAME='Title']"/>

你甚至可以改变更多并且更加相对:

变化:

<xsl:for-each select="//ROW">

要:

<xsl:for-each select="RESULTS/ROW">