将属性添加到XSLT中的CDATA节点

时间:2012-08-06 23:14:50

标签: xml xslt xslt-1.0

我正在尝试将属性添加到属于CDATA的节点。我的XML是

 <documents>
   <document id="1234">
    <field name="CDATA" value="bill"><![CDATA[<bill name="xxx" age="12" />]]> </field>
   </document>
 </documents>

结果xml应为

<docs>
  <doc>
   <bill name="xxx" age="12" id="1234" />
  </doc>
</docs>

文档节点中的id属性应作为属性添加到CDATA内的节点。

我能够将CDATA值作为字段[@ name ='CDATA']获取,但我不知道如何将文档的属性添加到cdata中。

任何人都可以建议我如何做到这一点或指出我正确的方向?

2 个答案:

答案 0 :(得分:0)

CDATA部分只是文本节点的一部分

因此它只包含文本而没有节点(即使文本看起来与节点的文本序列化相同)。

因此,除非您还有一个用XSLT编写的XML解析器,否则在纯XSLT 1.0和2.0中无法实现所需。

在XSLT 3.0 / XPath 3.0(仍然是草稿)中,可能有一个函数: parse-xml() ,可用于解析文本并从中创建XML文档/片段:< / p>

答案 1 :(得分:0)

CDATA意味着“即使它看起来像标记,这里的东西也会被视为纯文本”。 CDATA是解析器忽略内容中标记的明确指令。这是CDATA标签的唯一目的。因此,根据定义,CDATA部分中没有节点。