【发布时间】:2016-04-08 15:58:07
【问题描述】:
我无法让国家/地区值显示在我的 XSLT 转换中,并且不确定如何处理我的 XSLT 中的 CDATA 标记
这是我的 XML:
<catalog xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">
<cd>
<title>Empire Burlesque</title>
<description><![CDATA[
<div>
<b>Country:</b>
<a href="location.html">Canada</a>
<b>City:</b>
<a href="location.html">Calgary</a>
</div>
]]></description>
</cd>
<cd>
<title>Hide your heart</title>
<description><![CDATA[
<div>
<b>Country:</b>
<a href="location.html">Canada</a>
<b>City:</b>
<a href="location.html">Toronto</a>
</div>
]]></description>
</cd>
</catalog>
这是我的 XSLT:
<xsl:template match="/">
<xsl:for-each select="catalog/cd">
<p>Title: <xsl:value-of select="title"/></p>
<p>Country: <xsl:value-of select="description/div/b['Country:']/following-sibling::a" disable-output-escaping="yes"/></p>
</xsl:for-each>
</xsl:template>
我的结果是:
<p>Title: Empire Burlesque</p>
<p>Country: </p>
<p>Title: Hide your heart</p>
<p>Country: </p>
如何显示我的国家/地区价值观。如果我从我的 XML 中删除 CDATA 标记,它就可以工作。但是,我无法修改 XML,因为它将来自外部提要。
谢谢 干杯
【问题讨论】:
-
您使用哪种 XSLT 1.0 处理器?在这些 CDATA 部分中是否有格式正确的 XML?还是那会是 HTML?通常人们使用 CDATA 部分来转义不是 XML 的数据。
-
@MartinHonnen 我运行了以下代码:
结果是 Apache Software Foundation。从外观上看,它将是 CDATA 部分中的 HTML -
即使在 XSLT 2.0 中也很困难,尽管 Saxon 有扩展或在 XSLT 2.0 中完成了 HTML 解析器实现。使用 XSLT 1.0,如果您真的想解析内容以在其上执行 XPath,您将需要检查如何调用或实现扩展函数以集成 HTML 解析器。
标签: xml xslt xml-parsing xslt-1.0 cdata