我在理解xslt时遇到了问题。在我的源文档中,我必须从<p>
标记中找到内部文本,其class属性等于"deck"
。
在我的源代码xml中:
<body>
<p class="deck">Text here</p>
... ... cut ... ... ...
在我的xsl文件中
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:TimeInc="http://www.timeinc.com/namespaces/PAMTimeInc/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:prism="http://prismstandard.org/namespaces/basic/2.1/"
xmlns:pam="http://prismstandard.org/namespaces/pam/2.1/"
xmlns:pim="http://prismstandard.org/namespaces/pim/2.1/"
xmlns:prl="http://prismstandard.org/namespaces/prl/2.1/">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/>
<Description>
<xsl:choose>
<xsl:when test="//p@deck != ''">
<xsl:value-of select="//p@deck"/>
</xsl:when>
<xsl:otherwise>
<xsl:text disable-output-escaping="yes"/>
</xsl:otherwise>
</xsl:choose>
</Description>
... ... cut ... ... ...
这显然是不正确的,因为我不知道我在做什么。有没有关于如何做到这一点或更多地了解它的例子。
答案 0 :(得分:2)
您可以根据属性值表示元素的条件匹配,例如
element[@attribute = 'hello']
针对您的具体情况:
<p class="deck">Text here</p>
尝试:
//p[@class = 'deck']/text()
这是一个XPath表达式,可以理解为返回所有p元素的文本内容序列,其属性类的值为“deck”。
XSLT使用XPath来导航XML文档,因此可能值得在XPath和XSLT上阅读。
答案 1 :(得分:2)
我没有看到任何地方作为模板的基础。不过,我认为这是一个剪切和粘贴问题。
无论如何,找到class属性设置为deck的所有p元素的xpath是: // P [@类= '甲板']
您可以使用以下内容迭代它们:
<xsl:for-each select="//p[@class='deck'">
</xsl:for-each>
答案 2 :(得分:2)
<Description>
<xsl:choose>
<xsl:when test="//p[@class='deck']">
<xsl:value-of select="//p[@class='deck']" />
</xsl:when>
<xsl:otherwise>
<xsl:test> </xsl:text>
</xsl:otherwise>
</xsl:choose>
</Description>