如何使用XSLT读取注释之间的XML内容?

时间:2013-06-18 13:19:58

标签: xml xslt comments

我需要帮助使用XSLT在注释之间获取XML内容。

XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
    <book>
        <title lang="eng">Harry Potter</title>
        <price>29.99</price>
    </book>
    <!-- start comment 1 -->
    <book>
        <title lang="it">Learning XML</title>
        <price>39.95</price>
    </book>
    <!-- end comment 1 -->

</bookstore> 

输出:

<book>
            <title lang="it">Learning XML</title>
            <price>39.95</price>
        </book>

2 个答案:

答案 0 :(得分:2)

你可以试试这样的......

XML输入

<bookstore>
    <book>
        <title lang="eng">Harry Potter</title>
        <price>29.99</price>
    </book>
    <!-- start comment 1 -->
    <book>
        <title lang="it">Learning XML</title>
        <price>39.95</price>
    </book>
    <!-- end comment 1 -->

</bookstore>

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="/*">
        <xsl:apply-templates select="*[preceding-sibling::comment()[starts-with(normalize-space(.),'start')] and 
            following-sibling::comment()[starts-with(normalize-space(.),'end')]]"/>
    </xsl:template>

</xsl:stylesheet>

<强>输出

<book>
   <title lang="it">Learning XML</title>
   <price>39.95</price>
</book>

答案 1 :(得分:-1)

依靠评论复制并不是很好。但是,我认为 - 你有理由选择这样做。这是我的尝试。

<xsl:template match="/">
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match="comment()">
    <xsl:if test="text()='START'">
        <!-- Set Flag for copying content <xsl:variable name="dummy" value-of="myPrefix:setFlag()"/> -->
    </xsl:if>
    <xsl:if test="text()='END'">
        <!-- Reset Flag for stop copying content -->
    </xsl:if>
</xsl:template>

不幸的是,您无法在XSLT中更新变量。也许,您可以尝试使用自己的Java类实例,该实例可以包含由模板检查的标记内容,以决定是否复制。