使用XSLT在xml中转换特殊字符

问题描述 投票:1回答:1

我试图使用xslt将xml中的特殊字符转换为其编码形式。

例:

& to & 
" to " 
< to &lt; 
> to &gt;

等等。我正在使用的代码如下

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

<xsl:template match="/">
    <xsl:apply-templates select="//search-results/items" />
</xsl:template>

<xsl:template match="items">
    <textarea>
        <xsl:apply-templates select="file-item" />
    </textarea>
</xsl:template>


<xsl:template match="file-item">
    <xsl:apply-templates select="." mode="details"/>    
</xsl:template>


<xsl:template match="*" mode="details">
    <file-item>
        <id><xsl:value-of select = "@id"/></id>
        <xsl:copy-of select = "name"/>
        <xsl:copy-of select = "creation-date" />
        <xsl:copy-of select = "modification-date"/>
        <xsl:copy-of select = "file-info"/>
        <xsl:copy-of select = "creator"/>
        <xsl:copy-of select = "last-modifier"/>     
      </file-item>        
</xsl:template>
</xsl:stylesheet>

XML结构是

<id>5060554</id>
<name>This is a File && and it is a "Test File" </name>
<creation-date timestamp="1487516375360">19.02.2017 14:59</creation-date>
<modification-date timestamp="1488128705695">26.02.2017 17:05</modification-date>
<file-info>
<name>Background-Wallpaper & Nature.jpg</name>
<creator user-id="2196">
<last-modifier user-id="2120">

输出也应该包含xml节点,这就是为什么我在textarea中使用xsl:copy而不是xsl:value-of。 Becausse xsl:value-of select =“name”只输出这是一个文件&&它是一个“测试文件”,而xsl:copy-of将生成这是一个文件&&它是一个“测试文件”

我使用的是XSLT版本1.o

我想要的输出是This is a File &amp; &amp; and it is a &quot;Test File&quot;

xml xslt xslt-1.0 special-characters
1个回答
1
投票

你说输入XML包含

<name>This is a File && and it is a "Test File" </name>

这是一个矛盾。如果它包含该字符串,那么它不是XML。 XML中的&符号总是被转义。如果输入不是XML,那么就不能使用XSLT来处理它。

你说“我们正在使用XSLT将数据转换为xml,然后转换为html(网站的UI视图)。”您似乎正在将数据错误地转换为XML,您需要修复它。

© www.soinside.com 2019 - 2024. All rights reserved.