【问题标题】:Adding an attribute to a node which is a CDATA in XSLT向 XSLT 中的 CDATA 节点添加属性
【发布时间】:2023-08-20 22:07:01
【问题描述】:

我正在尝试将属性添加到属于 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..

谁能建议我如何做到这一点或指出正确的方向?

【问题讨论】:

  • 请编辑您的帖子并显示您正在使用的 XSLT。
  • CDATA 部分只是文本节点的一部分。因此它只包含文本而没有节点(即使文本看起来与节点的文本序列化相同)。因此,您想要的在纯 XSLT 1.0 和 2.0 中是不可能的,除非您也有一个用 XSLT 编写的 XML 解析器。在 XSLT 3.0/XPath 3.0(仍然是草稿)中可能有一个函数:parse-xml(),可用于解析文本并从中创建 XML 文档/片段:w3.org/TR/xpath-functions-30/#func-parse-xml

标签: xml xslt xslt-1.0


【解决方案1】:

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

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

因此,您想要的在纯 XSLT 1.0 和 2.0 中是不可能的,除非您也有一个用 XSLT 编写的 XML 解析器

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

【讨论】:

    【解决方案2】:

    CDATA 的意思是“即使看起来像标记,这里的内容也将被视为纯文本”。 CDATA 是对解析器的显式指令,用于忽略内容中的标记。这是 CDATA 标记的唯一用途。因此,根据定义,CDATA 段内没有节点。

    【讨论】:

      最近更新 更多