2017-03-16 134 views
1

我不确定我是否正确提问,这就是为什么我无法在任何地方找到答案的原因。但基本上我需要将一个节点与另一个节点进行匹配,并使用兄弟节点作为值。下面是一个例子XSLT:如何通过另一个节点查找节点的值

<group> 
    <section> 
     <reference>123</reference> 
     <name>ABC</name> 
    </section> 
    <section> 
     <reference>456</reference> 
     <name>DEF</name> 
    </section> 
</group> 
<element> 
    <reference>123</reference> 
    <price>20.00</price> 
</element> 

而在我的XSL模板我想显示的价格和名称,所以我需要匹配的元素参考章节和显示名称来引用。

ABC - 20.00

我怎样才能做到这一点?

回答

2

我需要匹配的元素参考章节和 显示名称来引用。

XSLT有一个名为key只用于此目的的特殊功能。例如,下面的样式表:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:key name="section" match="section" use="reference" /> 

<xsl:template match="/root"> 
    <output> 
     <xsl:for-each select="element"> 
      <item> 
       <xsl:value-of select="key('section', reference)/name"/> 
       <xsl:text> - </xsl:text> 
       <xsl:value-of select="price"/>  
      </item> 
     </xsl:for-each> 
    </output> 
</xsl:template> 

</xsl:stylesheet> 

当施加到以下合式输入:

XML

<root> 
    <group> 
    <section> 
     <reference>123</reference> 
     <name>ABC</name> 
    </section> 
    <section> 
     <reference>456</reference> 
     <name>DEF</name> 
    </section> 
    </group> 
    <element> 
    <reference>123</reference> 
    <price>20.00</price> 
    </element> 
</root> 

将返回:

结果

<?xml version="1.0" encoding="UTF-8"?> 
<output> 
    <item>ABC - 20.00</item> 
</output> 
-1

在XPath表达式中使用两个类似的谓词。在这个例子中,一个名为<root>的根节点被假定为包装你的XML的其余部分。

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

    <xsl:template match="/root"> 
     <xsl:value-of select="group/section[reference/text() = ../../element/reference/text()]/name" /> - <xsl:value-of select="element[reference/text() = ../group/section/reference/text()]/price" /> 
    </xsl:template> 

</xsl:stylesheet> 

输出是:

<?xml version="1.0"?> 
ABC - 20.00 
+1

我们假定你是会出现只有一个'element'具有匹配'section'。我没有看到这样的假设的理由;事实上我相信期待会有很多人是合理的。 –

2
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 
    <xsl:output method="text" indent="yes"/> 
    <xsl:key name="sss" match="section" use="reference"/> 
    <xsl:template match="root"> 
     <xsl:for-each select="element"> 
      <xsl:value-of select="key('sss', reference)/name"/> 
      <xsl:text> - </xsl:text> 
      <xsl:value-of select="price"/> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
相关问题