如何使用 XSLT 1.0 中的"替换"函数从 XML 中删除特殊字符以获得正确的 JSON 输出?



XML我得到了

<root>
<page>0</page>
<totalRecords>74</totalRecords>
<totalPages>1</totalPages>
<offset>0</offset>
<status>success</status>
<entityList>
<ENAME>
<ADAMS>
</ENAME>
<DNAME>&RESEARCH</DNAME>
<JOB>CLERK</JOB>
<EMPNO>7876</EMPNO>
<HIREDATE>1987-05-23 "00: 00 ":00.0</HIREDATE>
<LOC>DALLAS</LOC>
</entityList>
<entityList>
<ENAME>>ALLEN</ENAME>
<DNAME>&SALES</DNAME>
<JOB>SALESMAN</JOB>
<EMPNO>7499</EMPNO>
<HIREDATE>1981-02-20 00:00:00.0</HIREDATE>
<LOC>CHICAGO</LOC>
</entityList>
<entityList>
<ENAME>Abhi></ENAME>
<DNAME>&SALES</DNAME>
<JOB>PRU</JOB>
<EMPNO>7956</EMPNO>
<HIREDATE></HIREDATE>
<LOC>CHIC"AGO "</LOC>
</entityList>
</root>

迄今为止我的XSLT块

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="no" omit-xml-declaration="yes" />
<xsl:template match="root">
{
"page":<xsl:value-of select="//page"/>,
"totalRecords":<xsl:value-of select="//totalRecords"/>,
"totalPages":<xsl:value-of select="//totalPages"/>,
"offset":<xsl:value-of select="//offset"/>,
"status":"<xsl:value-of select="//status"/>",
"entityList":[<xsl:for-each select="entityList"> 

{
"ENAME":"<xsl:value-of select="translate(ENAME,'&lt;,&gt;','')"/>",
"DNAME":"<xsl:value-of select="replace(DNAME,'&amp;','')"/>",
"JOB":"<xsl:value-of select="JOB"/>",
"EMPNO":"<xsl:value-of select="EMPNO"/>",
"HIREDATE":"<xsl:value-of select="replace(HIREDATE,'&quot;','')"/>",
"LOC":"<xsl:value-of select="replace(LOC,'&quot;','')"/>"
}
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:for-each> 
]
}
</xsl:template>
</xsl:stylesheet>

我是使用replace函数还是使用translate函数?在这里,我看到人们使用变量,但我是XSLT的新手,只是在学习一切。

我需要删除'&','<gt;',以及雇用日期中的引号以及XML 中的所有其他特殊字符

请尽可能地提供建议和提示。非常感谢。

XSLT1.0中没有replace()函数;它是在2.0中引入的。

可以使用translate()删除特殊字符,例如translate(., '&amp;', '')

但你真正想做什么?为什么要删除这些字符?看起来好像您正在尝试输出JSON,在这种情况下,正确处理这些字符的方法就是简单地使用<xsl:output method="text"/>

最新更新