我有一个传入的XML,我有<
而不是<
我们可以使用XSLT将所有传入的<
替换为<
标记。有人可以让我知道我们怎样才能做到这一点。
输入:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:pr xmlns:ns1="http://example.com">
<ns1:dis>
<TP memberID="121897679001" FirstName="Tom" LastName="regen" auId="42424234">
<TPV>
<KAN>
<sur sType="POI" cDate="09022017" MDate="09022017" eDate="05182003">
<question id="9" desc="afa">
<ans id="0" desc="des">09172017</ans>
</question>
</sur>
</KAN>
</TPV>
</TP>
</ns1:dis>
</ns1:pr>
</soapenv:Body>
</soapenv:Envelope>
预期产出:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:pr xmlns:ns1="http://example.com">
<ns1:dis>
<TP memberID="121897679001" FirstName="Tom" LastName="regen" auId="42424234">
<TPV>
<KAN>
<sur sType="POI" cDate="09022017" MDate="09022017" eDate="05182003">
<question id="9" desc="afa">
<ans id="0" desc="des">09172017</ans>
</question>
</sur>
</KAN>
</TPV>
</TP>
</ns1:dis>
</ns1:pr>
</soapenv:Body>
</soapenv:Envelope>
答案 0 :(得分:1)
您的xml无效,因为</ans>
未使用<ans>
启动,我认为您不能在其上应用XSLT
。
如果您的语言是Java,则可以使用replaceAll
,如:
inputXml = inputXml.replaceAll( "<", "<" );
答案 1 :(得分:1)
假设该ns1:dis
元素的内容是正确转义的XML片段(您的代码段不是,因为</ans>
需要</ans>
),您现在可以使用{ {3}}和parse-xml-fragment
函数(XSLT 3.0)如下:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
exclude-result-prefixes="xs math"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="dis" xpath-default-namespace="http://example.com">
<xsl:copy>
<xsl:copy-of select="parse-xml-fragment(.)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
与Saxon 9.8(所有版本)或9.7(PE或EE)以及当前版本的Altova XMLSpy / Raptor一样,可以与任何其他XSLT 3.0实现一起使用。