0

次の XML 入力があります。

<?xml version="1.0" encoding="utf-8"?>
<string>
&lt;N/A&gt;
</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 '&lt;'
  ShowMessage(StringNode.Text);   // Causes an EXMLDocError, because the string node contains more than just a single node with NodeType = ntText
end;

パーサーにや類似の XML エンティティを実際のテキスト (や など)Open XMLに変換させるにはどうすればよいですか?&lt;&gt<>

XML 仕様の定義済みエンティティの回避策を書くことができます: http://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent

ただし、追加のエンティティノードには役立ちません...

関連: IXMLNode.IsTextElement が CDATA 要素に対して True を返さないのはなぜですか?

4

2 に答える 2

1

あなたの場合、プロパティは機能するはずだと思いますInnerText

ShowMessage(Document.DocumentElement.InnerText);

編集:InnerTextプロパティはインターフェイスの一部ではありません( IXMLNodeMSXML にはあると思います)。OpenXML 実装 (ADOM) には、GetTextContentおそらく同じことを行うメソッドがあるため、調べてみるとよいでしょう。

于 2012-06-07T21:19:22.463 に答える
0

新しいバージョンの Delphi には oxmldom ユニットが同梱されなくなり、いわゆる ADOM の新しいバージョンが利用可能になりました。

http://www.philo.de/xml/downloads.shtml

したがって、別のパーサーを使用するか、OpenXML をアップグレードすると、問題が解決します。

于 2012-10-25T07:06:46.377 に答える