0 xslt xpath special-characters
我的xml元素内容有特殊字符,如<,>,[,].我想找到元素macthing内容<![CDATA[someText]]>
,并用一些新的值替换它<![CDATA[newValue]]>
.
<property name="sourcePath">
<string><![CDATA[someText]]></string>
</property>`
Run Code Online (Sandbox Code Playgroud)
我试图使用下面的xsl模板来做到这一点.但它没有用.
<xsl:template match="property[string='<![CDATA[someText]]>']">
<xsl:element name="string">
<xsl:text disable-output-escaping="yes"><![CDATA[newValue]]></xsl:text>
</xsl:element>
Run Code Online (Sandbox Code Playgroud)
请帮忙.
XML INFOSET中没有预先找到CDATA部分,因此其内容只是常规文本 - 完整的文本节点或文本节点的一部分.
在您的情况下,CDATA部分是完整的文本节点,因此您可以:
<xsl:template match="property[string='someEscapedText']">
<string>newEscapedValue</string>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
您不需要使用DOE或CDATA - 只需转义NewValue中的字符并使用声明的cdata-section-elements="string"
属性<xsl:output>
.
这是完整的解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output cdata-section-elements="string"
omit-xml-declaration="yes" indent="yes"/>
<xsl:template match=
"property[string='<p>Hello, World</p>']">
<string><p>Hello, You</p></string>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
当此转换应用于以下XML文档时:
<property>
<string><![CDATA[<p>Hello, World</p>]]></string>
</property>
Run Code Online (Sandbox Code Playgroud)
产生了想要的正确结果:
<string><![CDATA[<p>Hello, You</p>]]></string>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1359 次 |
最近记录: |