1

以下は私が使用しているXMLです。

<employees>
    <employee>
        <empName>ABC</empName>
        <desgination>SSE</desgination>
        <age></age>
    </employee>
    <employee>
        <empName>DEF</empName>
        <desgination>VP</desgination>
        <age></age>
    </employee>
    <employee>
        <empName>GHI</empName>
        <desgination>Lead</desgination>
        <age></age>
    </employee>        
</employees>

以下は私が使用しているXSLです。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:my="some.uri" version="1.0">

    <my:EMPNames>
        <entry key="ABC">true</entry>
        <entry key="XYZ">true</entry>
        <entry key="JHK">true</entry>        
    </my:EMPNames>

    <xsl:template match="//employee[document('')/*/my:EMPNames/entry[@key = empName]]">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
    </xsl:template>
    <xsl:template match="@*">
        <xsl:attribute name="{local-name()}">
            <xsl:value-of select="."/>
        </xsl:attribute>
    </xsl:template>
</xsl:stylesheet>

empName が ABC の従業員セクションを印刷できません。Key-Value ペア リストを使用しています。入ってくる xml empName にリストの値がある場合、その従業員セクションを印刷したいと思います。どういうわけか、値を取得でき//employee[document('')/*/my:EMPNames/entry[@key = empName]]ません。ここで何が欠けているか教えてください。

4

1 に答える 1

2

式の問題//employee[document('')/*/my:EMPNames/entry[@key = empName]]は、最後の xpath 述語entry[@key = empName]です。これは、子要素empNameと等しい@key属性を持つエントリを探していることを意味します。つまり、 entry要素の下のempNameを探しています。

あなたがする必要があるのはこれです。

<xsl:template match="//employee[empName = document('')/*/my:EMPNames/entry/@key]">

または、エントリが trueのものだけを含めたい場合は、これを行います

<xsl:template 
    match="//employee[empName = document('')/*/my:EMPNames/entry[. = 'true']/@key]">
于 2012-11-20T09:59:03.930 に答える