json下面是一个有效的Json。但是XSLT 3.0转换json-to-xml()无法工作并在json语法中显示一些错误。
{
"identifier": {
"use": "<div xmlns=\"http://www.w3.org/1999/xhtml\"> </div>"
}
}
我能做些什么才能让它发挥作用。我认为与逃避角色相关的一些事情需要在这里完成。任何关于此的指针都会有很大的帮助。
尝试在此位置执行代码Fiddler
答案 0 :(得分:3)
您正在尝试将带有XML的JSON放入XML输入文档中,如果对样式表使用字符串参数,则会导致XML解析器尝试解析您放入小提琴中的输入的问题,如在https://xsltfiddle.liberty-development.net/gWmuiJf完成,你得到了
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="3.0">
<xsl:output indent="yes"/>
<xsl:param name="json-input" as="xs:string"><![CDATA[{
"identifier": {
"use": "<div xmlns=\"http://www.w3.org/1999/xhtml\"> </div>"
}
}]]></xsl:param>
<xsl:template match="/">
<xsl:copy-of select="json-to-xml($json-input)"/>
</xsl:template>
</xsl:stylesheet>
,输出
<map xmlns="http://www.w3.org/2005/xpath-functions">
<map key="identifier">
<string key="use"><div xmlns="http://www.w3.org/1999/xhtml"> </div></string>
</map>
</map>
您还可以在主XML输入中使用相同的CDATA转义,即使用
<root><![CDATA[{
"identifier": {
"use": "<div xmlns=\"http://www.w3.org/1999/xhtml\"> </div>"
}
}]]></root>
作为XML输入然后
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="3.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="json-to-xml(root)"/>
</xsl:template>
</xsl:stylesheet>
作为XSLT,就像https://xsltfiddle.liberty-development.net/gWmuiJf/1中所做的那样,你得到与上面相同的结果。
答案 1 :(得分:3)
在&#34; fiddler&#34;你指出,你有一个XML文件:
<data>{
"identifier": {
"use": "<div xmlns=\"http://www.w3.org/1999/xhtml\"> </div>"
}
}
</data>
问题是这是无效的XML。 XML解析器会看到一个开始标记<data>
,后跟一个文本节点,后跟一个开始标记<div xmlns=\
,然后抱怨,因为xmlns=
之后的第一个字符必须是"
比\
。
因此,您嵌套在嵌套在XML中的JSON中的XML。当您在JSON中嵌套XML时,您必须将"
转义为\"
,您已完成此操作;但是当您在XML中嵌套JSON时,您必须将<
转义为<
,而您还没有这样做。最简单的解决方案可能是使用CDATA部分:
<data><![CDATA[{
"identifier": {
"use": "<div xmlns=\"http://www.w3.org/1999/xhtml\"> </div>"
}
}
]]></data>