XSLT 将现有 !ENTITY 引用放入 XML <!DOCTYPE > 中

问题描述 投票:0回答:1
我已经查看了现有的问题/答案,但没有一个问题/答案完全相同,或者没有给出答案。 我有一个现有的 XML 文档

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE thing PUBLIC "XXX//DTD XML DTD for things//EN" "C:\work\thing.dtd" [<!ENTITY abreve "&#x103;"><!ENTITY agr "&#945;"><!ENTITY amacr "&#x101;"><!ENTITY bgr "&#946;">]> <thing> [...] </thing>
我使用此 XSLT 以另一种不相关的方式更改文档,效果很好:

<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/asset" priority="10"> [...] <output method="xml" omit-xml-declaration="no" indent="no" encoding="UTF-8" doctype-public="XXX//DTD XML DTD for things//EN" doctype-system="C:\work\thing.dtd"/> [...]
但是输出没有给出 ENTITY 项,只是这样:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE thing PUBLIC "XXX//DTD XML DTD for things//EN" "C:\work\thing.dtd"> <thing> [...] </thing>
如果需要,解决方案可以从文件中读取 ENTITY 内容,但不是必须这样做,因为它在所有实例中都是相同的,因此它可以重新提供 ENTITY 内容。
谢谢。

xml xslt entity doctype
1个回答
0
投票
恐怕 XSLT 不能很好地与 DTD 配合使用。标准 XSLT 无法读取输入文档的 DTD 或写入输出文档的 DTD,也无法阻止输入中的实体和字符引用被扩展(从而丢失)。有一些技巧可以解决其中一些限制,但没有一个非常令人满意。

© www.soinside.com 2019 - 2024. All rights reserved.