我正在使用 XSLT 1.0 和 XML。我是這些主題的新手,但我一直在閱讀并嘗試如何將 XSLT 應用于 XML。現在,我給出了一個需要從 XML 元素中過濾掉無效欄位的專案。java Transformer 類用于在 XML 上應用 XSLT。Java 代碼類似于“撰寫 XSLT 轉換”部分下的 oracle 教程頁面。我添加了以下 xml 和 xsl 并運行教程頁面中描述的代碼。我的目標是提取單引號和雙引號以及以下字符#60;a€¢^#x6;
XML 檔案
<?xml version="1.0" encoding="UTF-8"?>
<Author>
<Name>
<FirstName>Ch#60;a€¢^#x6;'""ris</FirstName>
<LastName>Banville</LastName>
</Name>
</Author>
XSL 檔案
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:variable name="invalid">#60;a€¢^#x6;"'</xsl:variable>
<div>
<xsl:value-of select="translate(/Author/Name/FirstName,$invalid,'')" />
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
最終輸出是
<body>
<div>Chris</div>
</body>
我的問題是在使用 XSLT 1.0 將單引號和雙引號以及其他無效字符一起轉義時,正確的方法是什么?我也試過嵌套
翻譯
創建“單”和“雙”變數后的XSLT功能如下圖所示。
<xsl:value-of select="translate(translate(/Author/Name/FirstName,$single,''),$double,'')" />
我仍然不確定使用我當前的任何實作的利弊,或者即使它是執行此類任務的正確方法。
uj5u.com熱心網友回復:
所述的XPath 1.0規范規定:
在運算式中,文字字串由單引號或雙引號分隔,它們也用于分隔 XML 屬性。為了避免運算式中的引號被 XML 處理器解釋為終止屬性值,可以將引號作為字符參考(
"或')輸入。或者,如果 XML 屬性用雙引號分隔,則運算式可以使用單引號,反之亦然。
這意味著在僅使用文字字串的單個運算式中,您可以通過以下方式洗掉雙引號字符:
<xsl:value-of select="translate(input, '"'')"/>
或單引號(撇號)字符:
<xsl:value-of select='translate(input, "'", "")'/>
但不是兩者兼而有之。
將包含所有不需要的字符的變數定義為文字文本(如您所做的那樣)可能是解決此限制的最佳方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/321718.html
