如何在XSLT中处理HTML实体.无需更改输入文件

Ram*_*esh 4 html xml xslt

我正在尝试使用XSLT将HTML文件转换为XML文件(使用Oxygen 9.0进行转换).

当我使用HTML文件配置和运行XSLT转换时,然后输出Oxygen

The entity 'nbsp' was referenced,but not declared.

我的输入html文件是:

<div><span>&nbsp;some text</span></div>
Run Code Online (Sandbox Code Playgroud)

注:我想知道如何处理实体仅使用XSLT,我希望让输入文件的任何更改.

Jam*_*xon 7

据我所知,您将需要更改输入文件.

通过更改您&nbsp;&#160;或通过声明将为您执行转换的自定义文档类型:

<!DOCTYPE doctypeName [
   <!ENTITY nbsp "&#160;">
]> 
Run Code Online (Sandbox Code Playgroud)

这是因为&nbsp;不是XML预定义实体之一.

  • 谢谢我刚用过&#160; 而不是&nbsp; (2认同)

Mad*_*sen 7

您可以使用XML实体创建定义nbsp实体的XML文件,并包含(损坏的)XML片段.

例如,假设您的片段保存为名为" invalid.xml " 的文件

<div><span>&nbsp;some text</span></div>
Run Code Online (Sandbox Code Playgroud)

创建一个这样的XML文件:

<!DOCTYPE wrapper [
   <!ENTITY nbsp "&#160;">
   <!ENTITY invalid-xml-document SYSTEM "./invalid.xml">
]><wrapper>
&invalid-xml-document;</wrapper>
Run Code Online (Sandbox Code Playgroud)

当解析该文件时,它将定义nbsp实体,包含"invalid.xml"中的内容,并nbsp正确解析实体.结果是这样的:

<wrapper>
  <div>
    <span> some text</span> 
  </div>
</wrapper>
Run Code Online (Sandbox Code Playgroud)

然后,只需调整您的XSLT以容纳新的文档元素(在此示例中为元素<wrapper>).