簡體   English   中英

如何使用 XSLT 1.0 中的“替換”功能從我的 XML 中刪除特殊字符以獲得正確的 JSON 輸出?

[英]How do I use the "replace" function in XSLT 1.0 to remove special characters from my XML to get the correct JSON output?

我得到的 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>

我是使用替換功能還是使用翻譯? 在這里,我看到人們使用變量,但我是 XSLT 的新手,我只是在學習一切。

我需要刪除“&”、“<>”和雇用日期中的引號以及 XML 中的所有其他特殊字符

請盡可能提供指示和提示。 謝謝你。

XSLT 1.0 中沒有replace()函數; 它是在 2.0 中引入的。

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

但你真的想做什么? 為什么要刪除這些字符? 看起來好像您正在嘗試輸出 JSON,在這種情況下,正確處理這些字符的方法只是使用<xsl:output method="text"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM