2017-10-06 102 views
0

我正在處理使用XSLT轉換XML(來自遺留系統)的需求。我遇到了處理帶有美元符號的標籤的問題(這是如何在遺留系統中存儲和生成的)。示例XML文件示例:在XML/XSLT中轉義美元符號

<root> 
    <example> 
     <problem$tag>12354</problem$tag>     
    </example> 
    <thisTagIsOK>sunny day</thisTagIsOK> 
</root> 

這是我的XSLT:

<?xml version="1.0" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="example"> 
    <xsl:apply-templates select="problem$tag>"/> 
     print stuff 
</xsl:template> 
</xsl:stylesheet> 

我試着用\與$ 無論有沒有運氣逃離美元。

有人可以幫助我嗎? 謝謝

+0

我不知道$是XML-DTD autorized。 ..你可以在xslt處理之前刪除char'$' – GGO

+0

這是一個仍在開發中的過程,所以仍然有機會。我仍在尋找解決方案。如果我找到一個明確指出在標籤中使用$是非法的定義,那就是我的解決方案。謝謝! – noitib

+0

像史蒂夫在他的第2點,我建議刪除char預處理xslt。不在一代。 – GGO

回答

1

不幸的是,您將無法解析它,因爲XML規範禁止在元素名稱中使用$符號(以及其他許多符號)。從XML specification

的ASCII符號和標點符號,具有相當大的 組的Unicode符號字符一起,被排除的名字,因爲 他們更加有用,因爲其中的XML名稱 使用外環境分隔符XML文檔

我說你的選擇是要麼:

  1. 修改源系統,如果可能的話,生成COM繞指柔XML
  2. 通過一些運行XML預處理你的XML,以使其符合,例如使用_更換$符號(這是允許的)
+0

謝謝。如果它是非法的,這對於這種情況就足夠了。 – noitib