1

次の XML コードがあります。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet media="netscape" type="text/xsl" href="periodic.xsl"?>
<PERIODIC_TABLE>
  <ATOM STATE="GAS">
    <NAME>Hydrogen</NAME>
    <SYMBOL>H</SYMBOL>
    <ATOMIC_NUMBER>1</ATOMIC_NUMBER>
    <ATOMIC_WEIGHT>1.00794</ATOMIC_WEIGHT>
    <BOILING_POINT UNITS="Kelvin">20.28</BOILING_POINT>
    <MELTING_POINT UNITS="Kelvin">13.81</MELTING_POINT>
    <DENSITY UNITS="grams/cubic centimeter">
    <!-- At 300K, 1 atm -->0.0000899
    </DENSITY>
  </ATOM>
  <ATOM STATE="GAS">
    <NAME>Helium</NAME>
    <SYMBOL>He</SYMBOL>
    <ATOMIC_NUMBER>2</ATOMIC_NUMBER>
    <ATOMIC_WEIGHT>4.0026</ATOMIC_WEIGHT>
    <BOILING_POINT UNITS="Kelvin">4.216</BOILING_POINT>
    <MELTING_POINT UNITS="Kelvin">0.95</MELTING_POINT>
    <DENSITY UNITS="grams/cubic centimeter">
    <!-- At 300K -->0.0001785
    </DENSITY>
  </ATOM>
</PERIODIC_TABLE>

そして、この XSL コードで「NAME」のすべての値を出力しようとしています:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html> 
            <xsl:value-of select="//ATOM/NAME" />
        </html>
    </xsl:template>
</xsl:stylesheet>

しかし、出力は次のとおりです。

<html>Hydrogen</html>

「ヘリウム」もあるはずですが。たとえば、xml:template 一致属性で「NAME」を選択するなど、これを行う他の方法があることは認識していますが、この動作の理由を知る必要があるため、value-of の使用方法を学ぶことができます。

4

2 に答える 2

1

Borodin の回答に加えて、XSLT 2.0 では動作が異なります。XSLT 2.0 では、xsl:value-of命令がシーケンスを作成します。

バージョン番号を 2.0 に変更し、2.0 プロセッサを使用するだけで、次の出力が得られます。

<html>Hydrogen Helium</html>
于 2013-05-24T00:28:57.307 に答える