我在XSLT中演示了IF
条件
我希望在text
与id
匹配时打印任意node id
。我从这里阅读文件:
https://msdn.microsoft.com/en-us/library/ms256209(v=vs.110).aspx
我使用了xsl:if
语法。但它没有打印<p>
标记值
这是指向XSLTTransform for my problem的链接。
这是我的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with
XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen of the
world.</description>
</book>
<book id="bk103">
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology society
in England, the young survivors lay the foundation for a new
society.</description>
</book>
</catalog>
我希望在图书ID为&#39; bk101&#39;时显示jjj
。
这是我的XSLT代码:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="book">
<xsl:if test="@id =bk101">
<p>jjj</p>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
但它没有按预期工作。
答案 0 :(得分:3)
用于选择book
元素的id
属性与'bk101'的值匹配的所有book
个节点的正确XPath表达式是
book[@id='bk101']
因此,完整的XSLT模板如下所示:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="book[@id='bk101']">
<p>jjj</p>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
@ zx485是正确的,在大多数情况下谓词可能会产生更接近你想要的行为。
那就是说,你的xsl:if
表达式会起作用 - 只有一个变化。您当前的代码包含此测试:
<xsl:if test="@id =bk101">
阻止此功能正常工作的关键问题是引号 - 或者更确切地说,您缺少引号。
您的test
上方bk101
不加引号 - 因此XPath引擎将此标识为元素名称,因此您最终将属性id
的值与非值的值进行比较 - 存在元素bk101
。您需要将bk101
放在引号中以强制XPath引擎将其作为字符串进行评估。 (在这里使用单引号,以避免与定义test
表达式的双引号的语法冲突。)固定行看起来像这样:
<xsl:if test="@id = 'bk101'">
运行相同的代码,修改为添加单引号,在示例输入文件的快速和脏转换中为我生成此输出:
<?xml version="1.0" encoding="UTF-8"?>
<p>jjj</p>