2014-12-28 62 views
0

我试图在源XML中读取&lt; &gt;的结构时遇到问题。处理< > in XSLT 1.0

输入结构 -

<?xml version="1.0" encoding="UTF-8"?> 
<RecordsData> 
    <RecordsData> 
    <UID>&lt;RecordsData xmlns=&quot;&quot;&gt;&lt;RecordsData&gt;&lt;UID&gt;200&lt;/UID&gt;&lt;RID&gt;Test-1&lt;/RID&gt;&lt;Date&gt;20142812&lt;/Date&gt;&lt;Status&gt;N&lt;/Status&gt;&lt;/RecordsData&gt;&lt;/RecordsData&gt;</UID> 
    </RecordsData> 
</RecordsData> 

预期输出结构(有两个要求) - 一个是刚刚转换成&lt; &gt;良好的XML标记。

<?xml version="1.0" encoding="UTF-8"?> 
<RecordsData> 
    <RecordsData> 
    <UID><RecordsData xmlns=""><RecordsData><UID>200</UID><RID>Test-1</RID><Date>20142812</Date><Status>N</Status></RecordsData></RecordsData></UID> 
    </RecordsData> 
</RecordsData> 

其次是仅低于输出UID标签内所有数据的提取 -

<RecordsData xmlns=""><RecordsData><UID>200</UID><RID>Test-1</RID><Date>20142812</Date><Status>N</Status></RecordsData></RecordsData> 

我能够获得第二输出,如果我手上有第一个。但是在广泛搜索论坛并对XSLT非常陌生之后,最近几天努力从Input获得第一个输出。

如果我们可以直接从输入源获得第二个输出 - 它实际上是预期的解决方案。对于上述 - 我只是试图将问题分解成几个步骤。

任何专家,请你帮忙!

谢谢,

回答

1

转换很容易,提取是没有的。

要逃脱的标记转换为真正的标记,简单地禁用写节点到结果树时,例如逃避:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="UID"> 
    <xsl:copy> 
     <xsl:value-of select="." disable-output-escaping="yes"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

理想情况下,你可以使用生成的XML文件从转义部分提取任何数据。否则,您将不得不为此目的应用字符串函数,因为转义的文本不是XML。

但是,在您的示例中,您不想从数据中提取任何特定的内容,只需将其隔离并将其转换为独立标记文档即可。

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:value-of select="RecordsData/RecordsData/UID" disable-output-escaping="yes"/> 
</xsl:template> 

</xsl:stylesheet> 
:这可通过很容易地完成