我有一个非常大的xml,其中一个块不断重复。现在我只想要第一个块的标签名称。我在xsl中很差。我试过但是徒劳。请任何人帮忙。 我的xml如下所示,
<catalog>
<product>
<title>GATE MCQ For Electronics & Communication Engineering</title>
<originalprice>Rs 680</originalprice>
<sellingprice>Rs 680Rs 530</sellingprice>
<discount>22% Off</discount>
<payment>Cash on delivery available</payment>
<review/>
</product>
<product>
<title>Gate Guide Computer Science / Information Technology (with CD)</title>
<originalprice>Rs 695</originalprice>
<sellingprice>Rs 695Rs 480</sellingprice>
<discount>31% Off</discount>
<payment>Cash on delivery available</payment>
<review/>
</product>
产品块不断重复,但值不同。 我现在使用的xsl是,
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.java2s.com"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="//*[local-name() = 'product'][1]/*">
<xsl:value-of select="name()"/>
</xsl:template>
</xsl:stylesheet>
输出结果是,
title
originalprice
sellingprice
discount
payment
review
Gate Guide Computer Science / Information Technology (with CD)
Rs 695
Rs 695Rs 480
31% Off
Cash on delivery available
但是必需的输出是,
title
originalprice
sellingprice
discount
payment
review
谢谢。
答案 0 :(得分:2)
您需要从根开始创建模板(通过匹配'/'),然后使用'apply-templates'限制您想要处理的元素,如下所示:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.java2s.com"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
version="1.0">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="/catalog/product[position() = 1]"/>
</xsl:template>
<xsl:template match="product">
<xsl:for-each select="./*">
<xsl:value-of select="name()"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
这将产生所需的输出......
答案 1 :(得分:2)
就这么简单:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="product[1]/*">
<xsl:value-of select="concat(name(), '
')"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:
<catalog>
<product>
<title>GATE MCQ For Electronics & Communication Engineering</title>
<originalprice>Rs 680</originalprice>
<sellingprice>Rs 680Rs 530</sellingprice>
<discount>22% Off</discount>
<payment>Cash on delivery available</payment>
<review/>
</product>
<product>
<title>Gate Guide Computer Science / Information Technology (with CD)</title>
<originalprice>Rs 695</originalprice>
<sellingprice>Rs 695Rs 480</sellingprice>
<discount>31% Off</discount>
<payment>Cash on delivery available</payment>
<review/>
</product>
</catalog>
产生了想要的正确结果:
title
originalprice
sellingprice
discount
payment
review
答案 2 :(得分:1)
"//*"
是“所有节点从root开始”,你可能想要更严格的XPath,如“/ catalog / product / *”(或类似于local-name
函数,如果你不想处理名称空间正确)。