天道酬勤,学无止境

在nodejs中解析xml文件时解析实体(Resolving entities while parsing xml file in nodejs)

问题

我的 xml 文件有

<!DOCTYPE application [<!ENTITY % common  SYSTEM "../common.ent">
%common;]>

我用过&commonFaults; ,(这是./common.ent文件中定义的实体之一),很多在xml文件中

在我的节点应用程序中,我想输入字符串化的 xml 文件内容。 作为回报,我希望解决所有实体。

输入

<?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE application [<!ENTITY % common  SYSTEM "../common.ent">
    %common;]>
    <application xmlns="http://wadl.dev.java.net/2009/02">
        <grammars>
            <include href="../xsd/api.xsd"/>
            <include href="../xsd/api-common.xsd"/>
        </grammars>
        <method name="GET" id="listVersionsv2">
             &commonFaults;
        </method>
    </application>

common.ent 文件:

 <!ENTITY commonFaults
           '
        <response status="503" xmlns="http://wadl.dev.java.net/2009/02">
            <representation mediaType="application/xml" element="csapi:serviceUnavailable"/>
            <representation mediaType="application/json"/>
        </response>
        <response status="400" xmlns="http://wadl.dev.java.net/2009/02">
            <representation mediaType="application/xml" element="csapi:badRequest"/>
            <representation mediaType="application/json"/>
        </response>
           '>

期望输出

<?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE application [<!ENTITY % common  SYSTEM "../common.ent">
    %common;]>
    <application xmlns="http://wadl.dev.java.net/2009/02">
        <grammars>
            <include href="../xsd/api.xsd"/>
            <include href="../xsd/api-common.xsd"/>
        </grammars>
        <method name="GET" id="listVersionsv2">
        <response status="503" xmlns="http://wadl.dev.java.net/2009/02">
            <representation mediaType="application/xml" element="csapi:serviceUnavailable"/>
            <representation mediaType="application/json"/>
        </response>
        <response status="400" xmlns="http://wadl.dev.java.net/2009/02">
            <representation mediaType="application/xml" element="csapi:badRequest"/>
            <representation mediaType="application/json"/>
        </response>
        </method>
    </application>

我使用--noent选项搜索xmllint可以有效地执行此操作。

我正在寻找一个类似的库/工具,它作为 npm 模块执行此操作,我可以在节点应用程序中“要求”并完成与xmllint相同的任务。

我不想使用节点的 ChildProcess。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 是否有Java XML API可以解析文档而无需解析字符实体?(Is there a Java XML API that can parse a document without resolving character entities?)
    问题 我有需要解析包含字符实体的XML的程序。 程序本身不需要解决它们,它们的列表很大并且会更改,因此,如果可以的话,我想避免对这些实体的显式支持。 这是一个简单的例子: <?xml version="1.0" encoding="UTF-8"?> <xml>Hello there &something;</xml> 是否有Java XML API可以成功解析文档而无需解析(非标准)字符实体? 理想情况下,它将把它们转换为可以特殊处理的特殊事件或对象,但是我会选择一个静默抑制它们的选项。 答案与范例: Skaffman给了我答案:使用将IS_REPLACING_ENTITY_REFERENCES设置为false的StAX解析器。 这是我试过的代码: XMLInputFactory inputFactory = XMLInputFactory.newInstance(); inputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, false); XMLEventReader reader = inputFactory.createXMLEventReader( new FileInputStream("your file here")); while (reader.hasNext()) {
  • 在不更改XML的情况下解析Java中包含HTML实体的XML文件(Parsing XML file containing HTML entities in Java without changing the XML)
    问题 我必须解析Java中的一堆XML文件,有时甚至是无效地包含诸如—类的HTML实体— , > 等等。 我了解解决此问题的正确方法是在解析之前向XML文件添加合适的实体声明。 但是,我无法做到这一点,因为我无法控制那些XML文件。 每当Java XML解析器遇到这样的实体时,是否存在我可以重写的某种回调? 我无法在API中找到一个。 我想使用: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder parser = dbf.newDocumentBuilder(); Document doc = parser.parse( stream ); 我发现可以在org.xml.sax.helpers.DefaultHandler重写resolveEntity ,但是如何将其与更高级别的API结合使用? 这是一个完整的示例: public class Main { public static void main( String [] args ) throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder parser = dbf
  • 在Java中解析XML时,请保留数字字符实体字符(例如``)(Keep numeric character entity characters such as `

    ` when parsing XML in Java)
    问题 我正在解析包含数字字符实体字符(例如(但不限于) < > < > (换行符回车<>)在Java中。 解析时,我将节点的文本内容附加到StringBuffer上,以便稍后将其写到文本文件中。 但是,当我将String写入文件或打印出文件时,这些unicode字符会被解析或转换为换行符/空格。 在Java中遍历XML文件的节点并将文本内容节点存储到String时,如何保留原始的数字字符实体字符符号? 演示xml文件的示例: <?xml version="1.0" encoding="UTF-8"?> <ABCD version="2"> <Field attributeWithChar="A string followed by special symbols " /> </ABCD> 示例Java代码。 它加载XML,在节点上进行迭代,并将每个节点的文本内容收集到StringBuffer。 迭代结束后,它将StringBuffer写入控制台,也写入文件符号(但不写入 )。 将这些符号存储到字符串中时,将如何保留这些符号? 请你帮助我好吗? 谢谢你。 public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException
  • NSXMLParser 不解析内部实体(NSXMLParser not resolving internal entity)
    问题 我有这个声明内部实体n XML NSString *xmlString = @"<?xml version=\"1.0\" encoding=\"UTF-8\"?> <!DOCTYPE JMdict [<!ENTITY n \"noun\">]> <JMdict> <entry> <sense> <pos>&n;</pos> <gloss>love</gloss> </sense> </entry> </JMdict>"; 并使用NSXMLParser解析它 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:[xmlString dataUsingEncoding:NSUTF8StringEncoding]]; [parser setDelegate:self]; [parser parse]; 我实现了委托方法 - (void)parser:(NSXMLParser *)parser foundInternalEntityDeclarationWithName:(NSString *)name value:(NSString *)value { NSLog(@"foundInternalEntityDeclarationWithName: %@ = %@", name, value); } - (void
  • XXE笔记
    目录 XML及DTD介绍 简介 DTD PCDATA CDATA 实体 内部实体声明 XXE漏洞介绍 挖掘技巧及修复 挖掘方式 漏洞利用 漏洞修复 XML及DTD介绍 简介 XML指可扩展标记语言(EXtensible Markup Lanuage),设计用来进行数据的传输和存储。 XML是一种标记语言,很类似HTML XML的设计宗旨是传输数据,而非显示数据 XML标签没有被定义。需要自行定义标签 XML被设计为具有自我描述性 XML是W3C的推荐标准 XML是不作为的 XML仅仅是纯文本 XML可以发明自己的标签 XML是对HTML的补充 XML是W3C的推荐标准 <?xml version="1.0" encoding="UTF-8"?> //xml声明 <!DOCTYPE message> //DTD文档类型定义 <!ELEMENT message (receiver,sender,header,msg)> //定义元素 <reset> <login>&aaa;</login> <secret>Any bugs?</secret> </reset> //文档元素 DTD XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。 文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD可被成行的声明于XML文档中
  • 错误解析/page.xhtml:错误跟踪[行:42]引用了实体“ nbsp”,但未声明(Error Parsing /page.xhtml: Error Traced[line: 42] The entity “nbsp” was referenced, but not declared)
    问题 我想在我的JSF页面中使用不间断空格。 我知道,在纯HTML中,我可以使用  为此,这很好。 但是,当我把这些  在Facelets页面中,则出现以下错误: 错误解析/page.xhtml:错误追踪[行:42]已引用实体“ nbsp”,但未声明。 这是怎么引起的,我该如何解决? 回答1 Facelets是一种基于XML的视图技术。 XML只有五个预定义的实体。   不在他们中间。 它仅在纯HTML或旧版JSP中使用时才有效(请注意:它在JSPX中不起作用,因为它也是基于XML的!)。 要解决此问题,您要么需要在包含  XHTML文件的doctype中自己声明实体  实体, <!DOCTYPE html [ <!ENTITY nbsp " "> ]> 或者,最好改用(十六进制)十进制表示法:   or   在普通的IDE中,执行“查找并替换所有文件”并替换每次出现的 应该很简单  通过  。 回答2 尝试使用&#160; 。 有关实体的更多信息,您可以参考以下URL HTML ISO-8859-1参考 回答3 <![CDATA[ ]]>应该可以正常工作。 但是,这在属性值内部不起作用。 或者,只要& 是XML中的预定义实体,您可以尝试&nbsp; -使用基于XML的JSP为我工作。 这也应该在属性内起作用。 回答4 对我而言,以下doctype启用  : <!DOCTYPE
  • 如何使用 NSXMLParser 解析内部声明的 XML 实体引用(How to resolve an internally-declared XML entity reference using NSXMLParser)
    问题 我有一个使用内部声明实体的 XML 文件。 例如: <?xml version="1.0" encoding="UTF-8"?> ... <!ENTITY my_symbol "my symbol value"> ... <my_element> <my_next_element>foo&my_symbol;bar</my_next_element> </my_element> ... 使用 NSXMLParser 类,我如何解析my_symbol实体引用? 根据实验, parser:foundInternalEntityDeclarationWithName:value:委托方法将调用my_symbol实体声明,值为"my symbol value" 。 然后,当到达my_next_element元素时, NSXMLParser将调用parser:didStartElement:namespaceURI:qualifiedName:attributes: delegate 方法。 在parser:didEndElement:namespaceURI:qualifiedName:为</my_next_element>调用之前, parser:foundCharacters:委托方法将使用字符串调用两次: "foo" "bar" my_symbol实体引用被忽略。
  • lxml unicode实体解析问题(lxml unicode entity parse problems)
    问题 我使用 lxml 如下解析从另一个系统导出的 XML 文件: xmldoc = open(filename) etree.parse(xmldoc) 但我得到: lxml.etree.XMLSyntaxError:未定义实体“eacute”,第 4495 行,第 46 列 显然,它在 unicode 实体名称方面存在问题 - 但我将如何解决这个问题? 通过 open() 还是 parse()? 编辑:我忘记将我的 DTD 包含在同一个文件夹中 - 它现在在那里并且具有以下声明: <!ENTITY eacute "é"> 并且在 xmldoc 中被引用(并且一直是),如下所示: <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE DScribeDatabase SYSTEM "foo.dtd"> 但是我仍然遇到同样的问题……DTD 是否也需要在 Python 中声明? 回答1 eacute不是 XML 中的预定义实体。 包括一个é XML 文件中的实体引用,它必须有一个<!DOCTYPE>声明指向定义实体的 DTD(例如 XHTML 1.0 DTD)。 如果 XML 使用é 但没有<!DOCTYPE> ,它的格式不正确,导出它的系统需要修复。 (没有充分的理由在 XML 文件中使用实体引用来表示é
  • 未定义实体 XML 解析异常(Undefined entity &nbsp XML parsing exception)
    问题 我试图在<!doctype />声明中定义non breaking space entity 。 代码 : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [ <!ENTITY nbsp " "> ] /> <html xmlns="http://www.w3.org/1999/xhtml"> .. .... 但是当我从上面的文档创建一个 XDocument 对象时,我得到了一个异常 Undefined entity &nbsp. 我做错了什么? 回答1 首先, "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [ <!ENTITY nbsp " "> ]中外部和内部实体的组合是不必要的,因为http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd包括www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent其中包括<!ENTITY nbsp " ">这和你的完全一样。 所以那一点应该是: <!DOCTYPE html PUBLIC "-//W3C
  • 如何在Bash中解析XML?(How to parse XML in Bash?)
    问题 理想情况下,我想做的是: cat xhtmlfile.xhtml | getElementViaXPath --path='/html/head/title' | sed -e 's%(^<title>|</title>$)%%g' > titleOfXHTMLPage.txt 回答1 这实际上只是对Yuzem答案的一种解释,但是我不认为应该对其他人进行过多的编辑,并且注释不允许格式设置,因此... rdom () { local IFS=\> ; read -d \< E C ;} 让我们将其称为“ read_dom”而不是“ rdom”,将其间隔一些并使用更长的变量: read_dom () { local IFS=\> read -d \< ENTITY CONTENT } 好的,因此它定义了一个名为read_dom的函数。 第一行使IFS(输入字段分隔符)成为此函数的局部变量,并将其更改为>。 这意味着当您读取数据而不是自动在空格,制表符或换行符上进行拆分时,它会在'>'上拆分。 下一行说要从stdin读取输入,而不是在换行符处停止,而是在看到'<'字符(分隔符标志的-d)时停止。 然后,使用IFS对读取的内容进行拆分,并将其分配给变量ENTITY和CONTENT。 因此,请采取以下措施: <tag>value</tag> 第一次调用read_dom会得到一个空字符串
  • 谈谈微信支付曝出的漏洞
    作者:编程迷思 链接:cnblogs.com/kismetv/p/9266224.html 知音专栏 程序员的出路 写程序时该追求什么,什么是次要的? 如何准备Java初级和高级的技术面试 一、背景 昨天(2018-07-04)微信支付的SDK曝出重大漏洞(XXE漏洞),通过该漏洞,***者可以获取服务器中目录结构、文件内容,如代码、各种私钥等。获取这些信息以后,***者便可以为所欲为,其中就包括众多媒体所宣传的“0元也能买买买”。 漏洞报告地址: http://seclists.org/fulldisclosure/2018/Jul/3 二、漏洞原理 1. XXE漏洞 此次曝出的漏洞属于XXE漏洞,即XML外部实体注入(XML External Entity Injection)。 XML文档除了可以包含声明和元素以外,还可以包含文档类型定义(即DTD);如下图所示。 在DTD中,可以引进实体,在解析XML时,实体将会被替换成相应的引用内容。该实体可以由外部引入(支持http、ftp等协议,后文以http为例说明),如果通过该外部实体进行***,就是XXE***。 可以说,XXE漏洞之所以能够存在,本质上在于在解析XML的时候,可以与外部进行通信;当XML文档可以由***者任意构造时,***便成为可能。在利用XXE漏洞可以做的事情当中,最常见最容易实现的,便是读取服务器的信息
  • XXE与XXE漏洞学习
    文章目录 XML介绍定义文档结构DTD文档类型定义实体类别介绍DTD 实体声明 XML外部实体攻击怎么甄别一个XML实体攻击漏洞?xxe漏洞检测思路从PHP代码层面上 xxe漏洞的危害危害1:读取任意文件有回显的情况无回显的情况 危害2:命令执行(装有expect扩展)危害3:内网探测/SSRF危害4:拒绝服务攻击 XXE漏洞修复与防御一道CTF题目案例分析 XML介绍 定义 XML是用于 标记电子文件 使其具有 结构性 的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。 文档结构 XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。 <!--XML声明--> <?xml version="1.0"?> <!--文档类型定义--> <!DOCTYPE note [ <!--定义此文档是 note 类型的文档--> <!ELEMENT note (to,from,heading,body)> <!--定义note元素有四个元素--> <!ELEMENT to (#PCDATA)> <!--定义to元素为”#PCDATA”类型--> <!ELEMENT from (#PCDATA)> <!--定义from元素为”#PCDATA”类型--> <!ELEMENT
  • 使用(X)HTML实体解析XML(Parse XML with (X)HTML entities)
    问题 尝试使用ElementTree解析包含未定义实体(即  )的XML会引起: ParseError: undefined entity   在Python 2.x中,可以通过创建解析器(文档)来更新XML实体dict: parser = ET.XMLParser() parser.entity["nbsp"] = unichr(160) 但是如何使用Python 3.x做到这一点? 更新:我方面存在误解,因为我忽略了在尝试更新XML实体dict之前调用parser.parser.UseForeignDTD(1) ,这会导致解析器出错。 幸运的是,@ m.brindley很有耐心,并指出XML实体dict在Python 3.x中仍然存在,并且可以像在Python 2.x中一样进行更新。 回答1 这里的问题是XML中唯一有效的助记符实体是quot , amp , apos , lt和gt 。 这意味着必须使用XML 1.1规范中定义的实体声明标记在DTD中定义几乎所有(X)HTML命名实体。 如果文档是独立的,则应使用内联DTD来完成,如下所示: <?xml version="1.1" ?> <!DOCTYPE naughtyxml [ <!ENTITY nbsp " "> <!ENTITY copy "©"> ]> <data> <country name=
  • 使DocumentBuilder.parse忽略DTD引用(Make DocumentBuilder.parse ignore DTD references)
    问题 当我以这种方法解析xml文件(变量f)时,出现错误 C:\ Documents and Settings \ joe \ Desktop \ aicpcudev \ OnlineModule \ map.dtd(系统找不到指定的路径) 我知道我没有dtd,也不需要它。 如何在忽略DTD参考错误的同时将此File对象解析为Document对象? private static Document getDoc(File f, String docId) throws Exception{ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(f); return doc; } 回答1 与@anjanb建议的方法类似的方法 builder.setEntityResolver(new EntityResolver() { @Override public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { if (systemId
  • 如何防止XXE攻击(How to prevent XXE attack)
    问题 我们对我们的代码进行了安全审计,它提到我们的代码容易受到 XML 外部实体 (XXE) 攻击。 解释 XML 外部实体攻击受益于在处理时动态构建文档的 XML 特性。 XML 实体允许动态地包含来自给定资源的数据。 外部实体允许 XML 文档包含来自外部 URI 的数据。 除非另外配置,否则外部实体会强制 XML 解析器访问由 URI 指定的资源,例如,本地机器或远程系统上的文件。 此行为将应用程序暴露给 XML 外部实体 (XXE) 攻击,可用于执行本地系统拒绝服务、未经授权访问本地计算机上的文件、扫描远程计算机以及执行远程系统拒绝服务. 以下 XML 文档显示了 XXE 攻击的示例。 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///dev/random" >]><foo>&xxe;</foo> 如果 XML 解析器尝试用 /dev/random 文件的内容替换实体,则此示例可能会使服务器崩溃(在 UNIX 系统上)。 推荐应该安全地配置 XML 解组器,以便它不允许外部实体作为传入 XML 文档的一部分。 为避免 XXE 注入,请勿使用将 XML 源直接处理为java.io.File 、 java.io
  • 我们可以将XML文件导入另一个XML文件吗?(Can we import XML file into another XML file?)
    问题 我们可以将一个XML文件导入另一个XML文件吗? 我的意思是说,在XML中是否有任何导入标记,它将XML路径作为参数并导入XML(为其提供了路径)。 回答1 您可以使用外部(已解析)常规实体。 您可以这样声明实体: <!ENTITY otherFile SYSTEM "otherFile.xml"> 然后,您可以像这样引用它: &otherFile; 一个完整的例子: <?xml version="1.0" standalone="no" ?> <!DOCTYPE doc [ <!ENTITY otherFile SYSTEM "otherFile.xml"> ]> <doc> <foo> <bar>&otherFile;</bar> </foo> </doc> 当XML解析器读取文件时,它将扩展实体引用并将所引用的XML文件作为内容的一部分包括在内。 如果“ otherFile.xml”包含: <baz>this is my content</baz> 然后,XML解析器将对XML进行评估并“看到”为: <?xml version="1.0" standalone="no" ?> <doc> <foo> <bar><baz>this is my content</baz></bar> </foo> </doc> 一些参考可能会有所帮助: http://www.xml.com
  • 解析 XML 时出错:对实体“版本”的引用必须以“;”结尾分隔符[重复](Error parsing XML : The reference to entity “version” must end with the ';' delimiter [duplicate])
    问题 这个问题在这里已经有了答案: 对实体“foo”的引用必须以';'结尾分隔符(2 个回答) 4年前关闭。 我对此很陌生,如果这是一个简单的问题,我很抱歉。 我正在尝试将 FB like box 安装到我的网站 www.thehungryeurasian.com 但是,当我尝试插入 Javascript SDK 时: <div id="fb-root"></div> <script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.0"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script> 出现以下错误: Error parsing XML, line 884, column 64: The reference to entity "version" must end with the ';'
  • 离线时无法解析hibernate.cfg.xml(Can't parse hibernate.cfg.xml while offline)
    问题 每当我断开与互联网的连接时,都会收到以下异常: org.hibernate.HibernateException: Could not parse configuration: com/mashlife/resources/hibernate.cfg.xml at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1542) at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:1035) at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:64) at org.hibernate.cfg.Configuration.configure(Configuration.java:1476) at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:1017) Caused by: org.dom4j.DocumentException: www.hibernate
  • Mybatis报错 Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'UserEntity'
    1年多没用Mybatis,闲来无事去官网照着文档单独配置个MyBatis跑着玩玩,结果不是很顺利。 1.报错原因 The error may exist in mapper/UserMapper.xml ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'mapper/UserMapper.xml'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'UserEntity'. Cause: java.lang.ClassNotFoundException: Cannot find class: UserEntity at org.apache.ibatis.exceptions.ExceptionFactory
  • 如何防止 .NET XML 解析器扩展 XML 中的参数实体?(How do you keep .NET XML parsers from expanding parameter entities in XML?)
    问题 当我尝试解析下面的 xml(使用下面的代码)时,我不断收到<sgml>&question;&signature;</sgml> 扩展到 <sgml>Why couldn’t I publish my books directly in standard SGML? — William Shakespeare.</sgml> 或者 <sgml></sgml> 由于我正在研究 XML 3 路合并算法,因此我想检索未扩展的<sgml>&question;&signature;</sgml> 我试过了: 正常解析 xml(这会导致扩展的 sgml 标记) 从 xml 的开头删除 Doctype 这会导致空的 sgml 标记) 各种 XmlReader DTD 设置 我有以下 XML 文件: <!DOCTYPE sgml [ <!ELEMENT sgml ANY> <!ENTITY std "standard SGML"> <!ENTITY signature " — &author;."> <!ENTITY question "Why couldn’t I publish my books directly in &std;?"> <!ENTITY author "William Shakespeare"> ]> <sgml>&question;&signature;</sgml>