2016-11-11 165 views
1

的属性我用下面的序列化节点:XSLT连载节点将删除节点

<xsl:template match="*" mode="serialize"> 
<xsl:text>&lt;</xsl:text> 
<xsl:value-of select="name()"/> 
<xsl:text>&gt;</xsl:text> 
<xsl:apply-templates mode="serialize"/> 
<xsl:text>&lt;/</xsl:text> 
<xsl:value-of select="name()"/> 
<xsl:text>&gt;</xsl:text> 
</xsl:template> 

有什么办法让属性序列化的节点之后?

回答

1

根据您的XSLT处理器,您可能首先需要检查是否支持XPath 3.0 serialize函数https://www.w3.org/TR/xpath-functions-30/#func-serialize或内置扩展函数来执行此作业。

如果要使用XSLT执行此操作,那么在模板中,还需要处理属性,例如,

<xsl:template match="*" mode="serialize"> 
<xsl:text>&lt;</xsl:text> 
<xsl:value-of select="name()"/> 
<xsl:apply-templates select="@*" mode="serialize"/> 
... 
</xsl:template> 

注意,并制定了解决方案,如http://lenzconsulting.com/xml-to-string/存在可能会更好,然后快速尝试一些模板作为一个适当的系列化这确实产生命名格式良好的XML即往返是相当大的挑战。

+0

如何处理属性? – Roniu

+0

好吧,我的建议'''已经处理过了,您需要编写一个模板'match =“@ *”mode =“serialize “很明显,正确的序列化和正如我一样,做这件事很困难,所以我会建议使用一个解决方案。否则,使用所谓“XML”序列化的人最终会抱怨这里或其他地方的XML解析抱怨错误。 –