0

在使用 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>
4

2 回答 2

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>
于 2013-06-18T15:00:07.310 回答
-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 类实例,该实例可以具有由模板检查的标志内容,以决定是否复制。

于 2013-06-18T13:47:47.073 回答