我希望能够在C#/.NET 4.0应用程序中显示实体名称和值的列表。
我能够使用XmlDocument.DocumentType.Entities
很容易地检索实体名称,但是有没有一种好的方法来检索这些实体的值呢?
我注意到,我可以使用InnerText
检索纯文本实体的值,但这不适用于包含XML标记的实体。
是使用正则表达式的最佳方法吗?
假设我有一个这样的文档:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE document [
<!ENTITY test "<para>only a test</para>">
<!ENTITY wwwc "World Wide Web Corporation">
<!ENTITY copy "©">
]>
<document>
<!-- The following image is the World Wide Web Corporation logo. -->
<graphics image="logo" alternative="&wwwc; Logo"/>
</document>
我想向用户显示一个包含三个实体名称(test、wwwc和copy)沿着值(名称后面的引号中的文本)的列表。我没有考虑过实体嵌套在其他实体中的问题,因此我对一个解决方案感兴趣,该解决方案要么完全扩展实体值,要么显示引号中的文本。
5条答案
按热度按时间pu82cl6c1#
尽管这可能不是最优雅的解决方案,但我想出了一个似乎能很好地满足我的目的的方法。首先,我解析原始文档并从该文档中检索实体节点。然后,我在内存中创建一个小的XML文档,并向其中添加所有实体节点。接下来,我向临时XML中的所有实体添加实体引用。最后,我从所有引用中检索了InnerXml。
下面是一些示例代码:
tkqqtvp12#
这是一种方法(未经测试),它使用XMLReader和该类的ResolveEntity()方法:
lzfw57am3#
如果您有一个
XmlDocument
对象,递归遍历每个XmlNode
对象可能会更容易(来自XmlDocument.ChildNodes
),对于每个节点,您可以使用Name
属性来获取节点的名称。(InnerXml
用于字符串表示,ChildNodes
用于编程访问XmlNode
对象,这些对象可以转换为XmlEntity
/XmlAttribute
/XmlText
)。f87krz0w4#
只需递归地遍历树,就可以轻松地显示XML文档的表示。
这个小类碰巧使用了一个控制台,但是您可以根据需要轻松地修改它。
使用这个类很简单。下面是一个打印出当前配置文件的例子:
自己尝试一下,你应该能够快速修改以获得你想要的。
dfty9e195#
我在使用公认的解决方案时遇到了问题。特别是: