【发布时间】:2013-12-13 11:42:41
【问题描述】:
输入xmlis
<getArtifactContentResponse>
<return>
<![CDATA[
<metadata>
<overview>
<name>scannapp</name>
<developerId>developer702</developerId>
<stateId>2</stateId>
<serverURL>abc.com</serverURL>
<id>cspapp1103</id>
<description>scann doc</description>
<hostingTypeId>1</hostingTypeId>
</overview>
</metadata>
]]>
</return>
</getArtifactContentResponse>
下面是我开发的样式表。我能够在 Cdata 中检索 XML,但无法获取元素值。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="html" encoding="utf-8" omit-xml-declaration="no" indent="no"/>
<xsl:template match="/">
<html>
<body>
<h1>Company Details</h1>
<table border="1">
<tr>
<th>name</th>
<th>developerId</th>
<th>Id</th>
</tr>table
<xsl:variable name ="data" select="//getArtifactContentResponse/return/node()" />
<tr>
<td>
<xsl:value-of select="$data/metadata/overview/name" disable-output-escaping="yes"/>
</td>
<td>
<xsl:value-of select="$data/metadata/overview/developerId" />
</td>
<td>
<xsl:value-of select="$data/metadata/overview/Id" />
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
输出为
<html><body><h1>Company Details</h1><table border="1"><tr><th>name</th><th>developerId</th><th>serverURL</th></tr>table
<tr><td></td><td></td><td></td></tr></table></body></html>
预期输出
<html><body><h1>Company Details</h1><table border="1"><tr><th>name</th><th>developerId</th><th>serverURL</th></tr>table
<tr><td>scannapp</td><td>developer702</td><td>cspapp1103</td></tr></table></body></html>
我想获取值名称、developerId、Id 并打印到 HtML。如何做到这一点请帮助我。使用 XSLT 1.0 版。
【问题讨论】:
-
您使用哪种 XSLT 1.0 处理器?您需要一个可以将带有 XML 的字符串解析为节点的扩展函数。
-
@MartinHonnen 你想到了哪个函数?
-
@user3016153,取决于 XSLT 处理器,有现有的解决方案,或者很容易实现一个,例如使用 Microsoft 的
XslCompiledTransform,您可以使用扩展函数或他们使用 @ 的对象987654328@ 解析 XML。使用 Microsoft 的 MSXML,您可以使用在 JScript 中实现的扩展功能,只需创建例如function parseXml(string) { var doc = new ActiveXObject('Msxml2.DOMDocument.3.0'); doc.loadXML(string); return doc; }. -
我试过但得到 java.lang.NoSuchMethodException: For extension function, could not find method org.apache.xml.utils.NodeVector.parse([ExpressionContext,]
-
在我的评论中,我就如何为 Microsoft 的
XslCompiledTransformXSLT 处理器和 Microsoft 的 MSXML XSLT 处理器实现扩展功能提出了建议。由于所有这些都取决于处理器,因此它不适用于其他处理器。我在第一条评论中请您告诉我们您使用的是哪种 XSLT 处理器。如果您使用 Java,那么我建议使用具有扩展功能的 Saxon 版本将 XML 解析为节点,例如 saxonica.com/documentation/index.html#!functions/saxon/parse。
标签: xslt