XSL 筛选器属性和名称()



>我在 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" 的文档和所有发票元素。

<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

使用

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>

你 XML 无效。我看不到发票和报价的正确结束标签。

相关内容

  • 没有找到相关文章

最新更新