XSL:修改XML中的内容

时间:2011-07-15 08:49:59

标签: xml xslt cdata

我有一个XML,其中有另一个XML(在CDATA中)。现在我想修改子XML的内容。怎么可能?

在下面的XML中,如果Address Type是Home,我想将其更改为“01”。 是否可以在XSLT 1.0中使用

<?xml>
 <a>
   <b>This is Parent</b>
   <c>
     <![CDATA[
       <?xml>
         <a1>This is Child XML></a1>
         <person_address type="Home">
           <street>ABCDStreet</street>
           <city/>
           <country/>
         </person_address>
     ]]>
  </c>
</a>

3 个答案:

答案 0 :(得分:0)

如上面评论中的链接问题所述,您不能将 CDATA 的内容视为XML,它是纯文本。

第一个简单易用的解决方案(不是说最好的解决方案):在你的情况下(XSLT 1.0和简单的文本替换)你可以使用一些EXSLT扩展模板,如replace()来匹配正则表达式的字符串和替换它具有想要的价值。

答案 1 :(得分:0)

您需要提取CDATA部分的文本并将其传递给XML解析器进行处理。一些XSLT处理器有一个扩展函数来执行此操作,例如saxon:parse(),或者您可以使用Java或Javascript编写自己的函数。

答案 2 :(得分:0)

CDATA部分中包含的任何内容都不是标记 - 它只是一维文字。

将其处理为文本(这是丑陋且不方便),或者编写一个扩展函数,将其参数解析为XmlDocument并返回此结果。然后,您可以使用XSLT处理结果:

 <xsl:apply-templates select="my:parse(theString)/*"/>

当然,要实现这一点,您必须确保传递给my:parse()扩展函数的文本是格式良好(序列化)的XML文档 - 在您的示例中它不是。