【发布时间】:2012-06-07 10:35:41
【问题描述】:
我有这个 XML 输入:
<?xml version="1.0" encoding="utf-8"?>
<string>
<N/A>
</string>
这里有一个简短的代码示例来说明问题:
uses
xmldom, oxmldom, XMLDoc, XMLIntf;
procedure TForm1.Test;
var
Document : IXMLDocument;
StringNode : IXMLNode;
LessThanNode : IXMLNode;
begin
DefaultDOMVendor := 'Open XML';
Document := LoadXMLData(Memo1.Lines.Text);
StringNode := Document.DocumentElement;
LessThanNode := StringNode.ChildNodes.First;
ShowMessage(LessThanNode.Text); // Displays '' (an emtpy string)
ShowMessage(LessThanNode.XML); // Displays '<'
ShowMessage(StringNode.Text); // Causes an EXMLDocError, because the string node contains more than just a single node with NodeType = ntText
end;
如何让Open XML 解析器将&lt;、&gt 和类似的XML 实体转换为它们的真实文本(如< 和>)?
我可以为 XML 规范中的预定义实体编写一个解决方法: http://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent
虽然这对额外的实体节点没有帮助......
相关:Why doesn't IXMLNode.IsTextElement return True for CDATA elements?
【问题讨论】:
-
您是否尝试过使用 OpenXML 验证文档?
-
@Pol - 他为什么要这么做?
标签: xml delphi delphi-2007