0

次の XML があり、"MBH" で始まる要素名のみを取得したい:

<?xml version="1.0" encoding="UTF-8"?>
<GenericRecs>
<GenericRecord>
    <record>
        <MBH1/>
    </record>
    <record>
        <BAL1/>
    </record>
    <record>
        <MBH2/>
    </record>
    <record>
        <BAL2/>
    </record>
    <record>
        <PAY2/>
    </record>
    <record>
        <MBH3/>
    </record>
    <record>
        <BAL3/>
    </record>
    <record>
        <PAY3/>
    </record>
</GenericRecord>
</GenericRecs>

次の XSLT があります。

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

<xsl:variable name="x" select="ext:node-set(substring(local-name(//record/child::*),1,3)='MBH')"/>

<xsl:variable name="mbh">
    <xsl:for-each select="$x">
            <item>
                <xsl:copy>
                    <xsl:value-of select="local-name(.)"/>
                </xsl:copy> 
            </item>
    </xsl:for-each>
</xsl:variable>

<xsl:template match="/">
    <xsl:apply-templates select="$mbh"/>
</xsl:template>
</xsl:stylesheet>

しかし、「説明: #RTREEFRAG を NodeList に変換できません!」というエラーが表示されるだけです。EXSLT を使用していますが、なぜそのエラーが発生するのかわかりません。

4

1 に答える 1

1

次の XML があり、"MBH" で始まる要素名のみを取得したい:

どうしたの

<xsl:apply-templates select="//record/*[starts-with(name(), 'MBH')]" />

?

いくつかのメモ:

  • 可能な限りname()ではなく使用してください。local-name()入力には名前空間がないため、とにかくそれらの間に違いはありません。
  • child::軸がデフォルトです。child::*と同等*です。
  • それについて何かできる場合は、入力を変更してください。実際に(単に「3番目であるのではなく)と完全に異なる場合を除き、<xyz1>通過する<xyz3>ことはあまり賢明ではありません。 その場合は賢明でしょう。それらが完全に異なる場合、それらは類似した名前を持つべきではありません。<xyz3><xyz1><xyz>
    <xyz num="1">
于 2012-09-07T07:12:27.713 に答える