提问人:GreatPretender 提问时间:9/19/2023 最后编辑:Mads HansenGreatPretender 更新时间:9/19/2023 访问量:44
如何使用 xslt 读取 xml 的 doctype 声明?
How to read doctype declaration of an xml using xslt?
问:
有没有办法使用 xslt 读取 xml 的 doctype 声明?
XML 文档类型声明示例:
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD with OASIS Tables with MathML3 v1.1 20151215//EN" "JATS-archive-oasis-article1-mathml3.dtd">
我需要检查doctype声明是否包含上面提到的特定dtd,如果条件为真,那么我需要在我的xml输出中生成一个元素。
我试过了.在本地,它通过提供 xml 文件的 uri 来工作,但在管道中它不是。unparsed-text-lines()
unparsed-text()
有没有办法阅读这些内容?
我找到了 saxon:schema 函数,但不确定如何使用它,或者它是否仅适用于 xml 和 xsd 组合,而不是用于 xml 和 dtd 的事情。
https://www.saxonica.com/html/documentation11/functions/saxon/schema.html
答:
1赞
Michael Kay
9/19/2023
#1
DOCTYPE声明不是XDM数据模型的一部分,这意味着它不是可以使用标准XSLT/XPath结构访问的文档的一部分。
正如 Martin 所指出的,它可供 SAX 应用程序使用(具体而言,通过将 startDTD 和 endDTD 通知给 LexicalHandler)。您可以通过编写一个 SAX 过滤器来利用这一点,该过滤器将 DOCTYPE 声明转换为合适的处理指令。URIResolver 可以返回包含此筛选器的 SAXSource;然后,XSLT 代码可以作为文档(根)节点的处理指令子节点访问 DOCTYPE 声明。
评论
saxon:schema()
无济于事。这仅适用于 XSD 架构信息,不适用于 DTD。