使用xslt读取xml中的xml
我得到了这个XML文档,其中有一个在元素中定义的XML字符串:使用xslt读取xml中的xml,xml,xslt,xpath,Xml,Xslt,Xpath,我得到了这个XML文档,其中有一个在元素中定义的XML字符串: <HIT> <FIELD NAME="xmlstring"> <?xml version="1.0"?> <kontaktpersoner><person><funksjon><![CDATA[Økonomi]]></funksjon>&
<HIT>
<FIELD NAME="xmlstring">
<?xml version="1.0"?>
<kontaktpersoner><person><funksjon><![CDATA[Økonomi]]></funksjon><tittel> <![CDATA[regnskapsansv.]]></tittel><email><![CDATA[test@test.no]]></email><navn><![CDATA[Test Test]]></navn></person><person><funksjon><![CDATA[Leder]]></funksjon><tittel><![CDATA[adm. dir.]]></tittel><email><![CDATA[test2@test.no]]></email><navn><![CDATA[Test2 Test]]></navn></person></kontaktpersoner>
</FIELD>
</HIT>
?xml version=“1.0”?
康塔克普森潘克松![CDATA[Økonomi]]/funkschontittel![CDATA[regnskapsansv.]/tittelemail![CDATA[test@test.no]]/电子邮件导航![CDATA[测试]]/navn/PersonFunksjon![CDATA[Leder]]/Funksjontitel![CDATA[adm.dir.]/tittelemail![CDATA[test2@test.no]]/电子邮件导航![CDATA[Test2测试]]/navn/person/kontaktpersoner
带有“xmlstring”
属性的元素中的XML用
和
转义,并作为字符串而不是XML读取
如何在XSLT中使用XPath
“xmlstring”属性中的XML用
和
转义,并作为字符串而不是XML读取
想想看。。。事情不正是这样吗?您的XSLT如何知道您的XML在XML中包含XML(而嵌套的XML甚至不在
CDATA
节中)?我认为这不能在XSLT中一步完成
您唯一的机会是提取文档字符串,将其解析为一个单独的XML文档,然后从中获取它
作为替代解决方案,您可以编写如下转换:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="FIELD[@NAME='xmlstring']">
<xsl:copy>
<xsl:copy-of select="@*" />
<!-- now this is somewhat brittle, I would not really recommend
it for production use, but maybe it helps nevertheless -->
<xsl:choose>
<xsl:when test="contains(., '<?xml')">
<xsl:value-of select="substring-after(., '?>')" disable-output-escaping="yes" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
产生:
<HIT>
<FIELD NAME="xmlstring">
<kontaktpersoner>
<person>
<funksjon><![CDATA[Økonomi]]></funksjon>
<tittel><![CDATA[regnskapsansv.]]></tittel>
<email><![CDATA[test@test.no]]></email>
<navn><![CDATA[Test Test]]></navn>
</person>
<person>
<funksjon><![CDATA[Leder]]></funksjon>
<tittel><![CDATA[adm. dir.]]></tittel>
<email><![CDATA[test2@test.no]]></email>
<navn><![CDATA[Test2 Test]]></navn>
</person>
</kontaktpersoner>
</FIELD>
</HIT>
在第二步中,它可以像普通的XML文档一样使用。如果您可以切换xslt处理器,Saxon有一个函数,允许您使用将嵌入的文档导入变量并像处理输入文档一样处理它。我不认为“属性”在您的问题中,是指FIELD元素的NAME属性,但是它指的是什么呢?你能澄清你的问题吗?此外,XML中间的XML处理指令要么是完全无效的,要么至少是非常奇怪的。根据XML规范,它应该出现在开头,并且必须出现在其他内容之前。这是无效的XML。XML声明必须从开头开始。实际上,它根本不是XML。@John:实际上,它代表一个XML字符串。我想你误解了OP的问题。