我有一个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>
答案 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文档 - 在您的示例中它不是。