当前位置: 首页 > 知识库问答 >
问题:

向XSLT中的CDATA节点添加属性

农鸿德
2023-03-14

我试图添加一个属性到一个节点,它是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中的节点。

我能够以字段[@name='CDATA']的形式获取CDATA值,但我不确定如何将文档的属性添加到CDATA中。。

谁能给我建议一下怎么做,或者给我指出正确的方向?

共有2个答案

邢炯
2023-03-14

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

贝洲
2023-03-14

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

因此,它只包含文本而不包含节点(即使文本似乎与节点的文本序列化相同)。

因此,在纯XSLT1.0和2.0中不可能实现您想要的功能,除非您还有一个用XSLT编写的XML解析器。

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

 类似资料:
  • 我有一个XML: 我想向根元素:/doc添加一个属性(名称空间),以便输出如下所示: 我尝试了三种xslt(跳过了默认的“复制所有”部分以减少问题的长度)。 xslt1:见下文,问题在于将空名称空间xmlns=”“添加到/doc的所有子节点(即:/doc/tag1和/doc/tag2) Xslt2:见下文,问题是“ns”被添加到根节点:和 xslt3:请参见下文,问题是报告了错误:未定义名称空间前

  • 我正在将XML返回到一个jsp页面。 最终的XML结构如下所示: 的根节点作为向量返回,我使用xtream将其别名为“tasks”,如上图所示。 如何使用XStream实现这一点?我需要使用XSLT文件来转换XML输出吗?完成这一点的最佳方法是什么?

  • 我正在将XML导入Access数据库。在转换过程中,数据之间的所有关系都会丢失。使用XSLT,我通过子节点将ID永久化。使用它,其中Id是添加到子节点的父元素: 我使用这种方法遇到的问题是父节点之外还有其他元素也具有元素或其变体,例如或类似的东西。当我尝试在上面的代码之外使用它时,的一些实例在以前的节点中丢失了。 很抱歉,我不知道在这里使用合适的语言,因为我对XSLT/XML不太熟悉。。。但我试图

  • 问题内容: 我想向现有的xml节点添加属性。我不想向xml文件添加新元素(新节点),我只想添加新属性。我怎样才能做到这一点? 特别是我尝试了以下代码行: 但是我得到以下异常: 问题答案: 在DOM解析器中,这非常容易。获取您的节点,只需使用此功能。 然后最后更新您的文档。像这样..

  • 我正在寻找下面输入和输出XML的XSLT(1.0)代码。 在输出XML中,C6元素下可以有任何子节点。在下面的XML中,我放了CN元素,但它可以是任何名称。 输入XML- 所需的输出XML- 先谢谢你。

  • 我试图从另一个模板“xsl:template match=“KTheme”模板中向“xsl:element name=“div”元素添加一个属性,但是我得到了一个XSLT错误,没有关于失败原因或失败原因的错误信息。有没有办法做到这一点? 基本上,当从“xsl:template name=“DisplayFrame”模板执行“xsl:apply templates/”行时,它与“KTheme”元素匹