XML转换是如何发生的

时间:2013-02-11 17:31:39

标签: xml xslt

在使用xslt转换xml时,我得到的结果是justin可以解释下面标记为粗体的语句吗?

xsl:value-of select =“ // * [price ='8.20'] / @ supplier

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<catalog>
    <cd>
        <title>Empire Burlesque</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
    </cd>
        <cd supplier="justin">
        <title>Unchain my heart</title>
        <artist>Joe Cocker</artist>
        <country>USA</country>
        <company>EMI</company>
        <price>8.20</price>
        <year>1987</year>
    </cd>
</catalog>

xslt:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <h2>My Supplier</h2>
    <table border="1">
    <xsl:value-of select="//*[price='8.20']/@supplier"/
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

2 个答案:

答案 0 :(得分:0)

一般而言:

// - Traverse the whole document

//* - Any element in the document

//*[price = '8.20'] - Any element in the document that has a <price> child element
                      with the value 8.20

//*[price = '8.20']/@supplier - The @supplier attribute of any element in the document 
                                that has a <price> child element with the value 8.20

由于文档中只有一个节点符合这些条件,并且它的值为“justin”,因此输出为“justin”。

答案 1 :(得分:0)

*:任何元素

//:在任何层次结构中(另一种方法是指定特定的XPath

*[price='8.20']:具有子元素price = '8.20'

的任何元素

//*[price='8.20']:任何层次结构中具有子元素price = '8.20'

的任何元素

@supplier:名称为supplier

的属性

//*/@supplier:任何层次结构中任何元素下的名称supplier的属性。

//*[price='8.20']/@supplier:具有子元素supplier的任何层次结构中任何元素下的名称price = '8.20'的属性。