我是XML新手。我正在尝试转换以下XMl文件
<?xml version="1.0"?>
<parent original_id="OI123" id="I123">
<custompanel panel="cp"></custompanel>
</parent>
将放到下面的HTML
中<html>
<body><div xmlAttribute="{"original-id":"OI123","id":"I123"}">
<p xmlAttribute={"panel":"cp"}/>
</div>
</body>
</html>
XML标签<parent>
应转换为<div>
, <custompanel>
应转换为<p>
标签。
我已经从W3CSchool阅读了XSTL文档,但我仍然不确定如何处理这个问题。有人能帮我吗?自定义属性需要以JSONObject的形式存储在xmlAttribute中。
在对正确的语法进行了快速研究之后,我想出了这个。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
method="xml"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
indent="yes"
encoding="utf-8" />
<xsl:template match="parent">
<html>
<body>
<div xmlAttribute="{{'original-id':'{@original_id}','id':'{@id}'}}">
<xsl:apply-templates />
</div>
</body>
</html>
</xsl:template>
<xsl:template match="custompanel">
<p xmlAttribute="{{'panel':'{@panel}'}}" />
</xsl:template>
</xsl:stylesheet>
棘手的部分是为JSON设置{}
的间距,这是我们自己构建的。您需要两个花括号{{
来获得一个字面量。此外,您需要在属性中使用单引号'
,因为双引号将被转义为"
。您可以使用@foo
选择器访问属性,但是现在您需要使用实际的{}
来使处理器认识到它应该做一些事情。
我猜你的实际文件有多个<parent>
。在这种情况下,需要在它周围放置一个根元素,并且需要调整XSLT。添加另一个<xsl:template match="/">
并将HTML框架移动到那里。