簡體   English   中英

XSL實體定義被忽略-為什么?

[英]XSL entity definitions ignored - why?

我正在編寫一個XSL文件,該文件將XML轉換為降價文本。 我想將HTML實體轉換為自身,例如“®” XML中的一段文本中將產生“®” 在輸出文件中。 不想翻譯“®” 到它的十六進制當量,這很可能會使下游的進程混亂。

在我看來,將以下聲明放在<?xml ...?>標記之后時,應滿足我的要求:

<!DOCTYPE stylesheet [
  <!ENTITY reg    "&amp;reg;" >
  <!ENTITY trade  "&amp;trade;" >
]>

但是,當我處理XML文件時,XSL處理器(Saxonica HE)在每次使用實體時都會發出這樣的消息:

Error on line 6 column 12 of test.xml:
  SXXP0003: Error reported by XML parser: The entity "reg" was referenced, but not declared.

我做錯了什么?

抱怨文件test.xml格式不正確。 您添加到樣式表中的所有內容都不會對此進行更改。 如果test.xml包含實體引用,則它必須具有定義這些實體的DTD。

您要實現的目標很困難,因為XSLT在XDM數據模型上工作,該模型無法以未擴展的形式表示實體引用。 XML解析器將始終在XSLT轉換器啟動之前擴展實體引用。

一種解決方法是Andrew Welch的Lexev工具,該工具會預處理輸入XML,以將實體引用轉換為其他內容(處理指令,IIRC),然后在序列化期間將其轉換回實體引用。

另一種方法(可能更好)是用&reg;替換所有出現的®(無論它們是否起源於&reg;&reg; 在序列化期間,您可以使用XSLT 2.0字符映射來實現。

暫無
暫無

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

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