XSL过滤器属性和名称()

时间:2014-02-27 03:04:37

标签: xml xslt xslt-1.0

我在XSL变量中加载跟随XML

<files>
     <documents lang="en">
       <Invoice>22345</Invoice>
       <Invoice>22346</Invoice>
       <Offer>22345</Offer>
       <Offer>22346</Offer>
     </documents>
     <documents lang="de">
       <Invoice>92345</Invoice>
       <Invoice>92346</Invoice>
       <Offer>92345</Offer>
       <Offer>92346</Offer>
     </documents>
</files>

现在我想使用属性lang =“de”for和所有发票元素来过滤文档。

<xsl:variable name="documents" select="document('documents.xml')/files/documents" />
<xsl:variable name="documentName" select="'Invoice'" />

<xsl:apply-templates 
   mode="filter" 
   select="$documents[@lang='de' and name() = $documentName]"/>

<xsl:template mode="filter" match="entrys[@lang] | *">
    <xsl:value-of select="."/>
</xsl:template>

当然不工作应该是这样的

<xsl:apply-templates 
   mode="filter" 
   select="$documents[@lang='de' and */name() = $documentName]"/>

但这给我一个语法错误。

所以有人可以帮助我一个想法。

修改 在“过滤器”中硬编码“发票”之前。

我添加了

提前致谢。

T.S

2 个答案:

答案 0 :(得分:1)

使用xml输入:

<?xml version="1.0" standalone="no"?>
<root>
    <a>XXX</a>
</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 omit-xml-declaration="yes"/>

    <xsl:variable name="documents" select="document('documents.xml')/files/documents" />

    <xsl:template match="root/a">
        <xsl:for-each select="$documents[@lang='de']/Invoice">
            <xsl:copy-of select="."/>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

我有这个输出

<Invoice>92345</Invoice><Invoice>92346</Invoice>

答案 1 :(得分:0)

您的XML无效..我看不到Invoice和Offer的正确结束标记。