标签: txmldocument

XPath和TXmlDocument

在Delphi中,XE是否可以将XPath与TXmlDocument组件一起使用?

我知道我可以使用后期绑定来访问MSXML2然后使用XPath:

XML := CreateOleObject('MSXML2.DOMDocument.3.0') ;
XML.async := false;
XML.SetProperty('SelectionLanguage','XPath');
Run Code Online (Sandbox Code Playgroud)

但我想知道TXmlDocument安装Delphi XE是否支持XPath.

delphi xpath txmldocument delphi-xe

18
推荐指数
1
解决办法
9165
查看次数

XML解析,TXMLDocument

我在解析XML时遇到问题.

如何获得字段值se_urlphrase
我需要link1_1,link1_2,key1,link2_1,link2_2,key2...这是在se_urlphrase.

我没有在谷歌中找到怎么做(也没找到关于如何使用的手册TXMLDocument).

<doc>
  <date2>20120214</date2>
  <date1>20120214</date1>
  <data count="116">
    <row>
      <search_engines count="2">
        <search_engine>
          <se_url>link1_1</se_url>
          <se_page>1</se_page>
          <se_id>2</se_id>
        </search_engine>
        <search_engine>
          <se_url>link1_2</se_url>
          <se_page>1</se_page>
          <se_id>3</se_id>
        </search_engine>
      </search_engines>
      <denial>0.4889</denial>
      <visits>45</visits>
      <page_views>52</page_views>
      <phrase>key1</phrase>
      <visit_time>126</visit_time>
      <depth>1.1556</depth>
    </row>
    <row>
      <search_engines count="2">
        <search_engine>
          <se_url>link2_1</se_url>
          <se_page>1</se_page>
          <se_id>3</se_id>
        </search_engine>
        <search_engine>
          <se_url>link2_2</se_url>
          <se_page>1</se_page>
          <se_id>6</se_id>
        </search_engine>
      </search_engines>
      <denial>0.5714</denial>
      <visits>42</visits>
      <page_views>50</page_views>
      <phrase>key2</phrase>
      <visit_time>109</visit_time>
      <depth>1.1905</depth>
    </row>
  </data>
</doc>
Run Code Online (Sandbox Code Playgroud)

xml delphi txmldocument xml-parsing

12
推荐指数
1
解决办法
4万
查看次数

如何使TXMLDocument(使用MSXML实现)始终包含编码属性?

我有遗留代码(我没写它)总是包含编码属性,但重新编译到D2010,TXMLDocument不再包含编码.由于XML数据在标记和数据上都有重音字符,因此TXMLDocument.LoadFromFile只会抛出EDOMParseErros,表示在文件中找到了无效字符.相关代码:

   Doc := TXMLDocument.Create(nil);  
   try
     Doc.Active := True;
     Doc.Encoding := XMLEncoding;
     RootNode := Doc.CreateElement('Test', '');
     Doc.DocumentElement := RootNode;
     <snip>
     //Result := Doc.XMl.Text;
     Doc.SaveToXML(Result);    // Both lines gives the same result
Run Code Online (Sandbox Code Playgroud)

在旧版本的Delphi中,生成以下行:

<?xml version="1.0" encoding="ISO-8859-1"?>
Run Code Online (Sandbox Code Playgroud)

在D2010上,生成:

<?xml version="1.0"?>
Run Code Online (Sandbox Code Playgroud)

如果我手动更改线路,所有工作都像过去几年一直工作.

更新:XMLEncoding是一个常量,定义如下

  XMLEncoding = 'ISO-8859-1';
Run Code Online (Sandbox Code Playgroud)

xml delphi encoding txmldocument delphi-2010

9
推荐指数
2
解决办法
4778
查看次数

使用TXMLDocument创建XML文档的问题

我是delphi的新手,现在我必须阅读创建一个xml.我的代码如下:

function foo.createXMLDocument(): TXMLDocument;
var
  res: TXMLDocument;
  rootNode: IXMLNode;
  sl : TStringList;
begin
  res := TXMLDocument.Create(nil);
  res.Active := true;
  rootNode := res.AddChild('label');
  // create string for debug purposes
  sl := TStringList.Create;
  sl.Assign(res.XML);// sl is empty after this assignment
  //add more elements
  generateDOM(rootNode);

  Result := res;
end;
Run Code Online (Sandbox Code Playgroud)

问题是,子节点数增加但res.XML为空.更不用说generateDOM过程中的其余元素似乎没有做任何事情.在你的帮助下,我将非常高兴.

delphi txmldocument

8
推荐指数
1
解决办法
2万
查看次数

Delphi - 在运行时创建的TXMLDocument生成AV,表单上的组件正在工作

我正在运行时创建一个TXMLDocument实例,以加载和解析XML文件.您可以查看以下代码:

    unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, xmldom, XMLIntf, msxmldom, XMLDoc, StdCtrls;

type
  Txml = class(TForm)
//    XMLDocument1: TXMLDocument;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  xml: Txml;

implementation

{$R *.dfm}

procedure Txml.FormCreate(Sender: TObject);
var    i,j:integer;
       aNode:IXMLNode;
       ws:String;
       XMLDocument1:TXMLDocument;
begin
 Memo1.Lines.Clear;
 XMLDocument1 := TXMLDocument.Create(nil);
 try
  XMLDocument1.LoadFromFile('C:\a.xml');
  XMLDocument1.Active := true;
  aNode := XMLDocument1.ChildNodes.First;
  while aNode<>nil do
  begin
   for i := 0 to aNode.ChildNodes.Count-1 do …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2006 txmldocument

8
推荐指数
1
解决办法
8775
查看次数

C++ Builder XE2,TXMLDocument'DTD被禁止'

当我尝试使用DTD读取XML文档(eagle文件)时,我收到错误:

Project xx引发异常类EDOMParserError并显示消息'DTD is prohibited'

XML标头如下所示:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
Run Code Online (Sandbox Code Playgroud)

如果我删除第二行...

<!DOCTYPE eagle SYSTEM "eagle.dtd">
Run Code Online (Sandbox Code Playgroud)

......一切正常

在一些谷歌搜索之后,似乎MSXML解析器默认情况下将一个名为'prohibitDTD'的选项设置为true(在早期版本中它是假的).

但是,似乎无法从TXMLDocument类将此选项设置为false.一个解决方案似乎是重新编译.pas库或使用CoCreateInstance()自行创建接口.

我在Delphi中看到的所有示例都有将这些示例转换为C++ Builder的困难.

有谁知道如何使用C++ Builder XE2读取DTD XML文档?

我的示例代码......

#include <xmldoc.hpp>

_di_IXMLNode XMLObject;

TXMLDocument *XMLDocument = new TXMLDocument(this);
XMLDocument->LoadFromFile(fileName); // <----- Exception EDOMParserError
XMLObject = XMLDocument->DocumentElement;
Run Code Online (Sandbox Code Playgroud)

谢谢...

xml vcl dtd txmldocument c++builder-xe2

6
推荐指数
1
解决办法
3067
查看次数

具有更多值和相同名称的XMLNode

我必须创建具有更多具有相同名称的值的节点的xml文档

<PstlAdr>
  <Ctry>SI</Ctry>
  <AdrLine>Gosposvetska 12</AdrLine>
  <AdrLine>Kranj</AdrLine>
</PstlAdr>
Run Code Online (Sandbox Code Playgroud)

使用oNode.ChildValues['AdrLine'] := ...它是不可能的 - 只能添加一个具有相同名称的值.如何添加更多具有相同名称的值?

最好的祝福

delphi txmldocument

5
推荐指数
1
解决办法
228
查看次数

TXMLDocument的替代品?

最近我们将代码从Delphi 2009升级到Delphi XE并更新了我们的Indy组件(不确定这是否相关).

但从那时起,我们在加载和保存XML文件时在Windows Server 2003计算机上出现了错误.

XMLDoc.LoadFromFile()
XMLDoc.SaveToFile()
Run Code Online (Sandbox Code Playgroud)

以下是错误

DLL msvcrt.dll在Windows Server 2003(300kb左右)上要小得多,相比之下在其他操作系统上超过600kb ...因此它在该文件中丢失了一些内容并导致错误......

有谁知道如何解决这一问题?或者TXMLDocument我可以尝试替代吗?

delphi dll txmldocument delphi-xe

5
推荐指数
1
解决办法
1129
查看次数

如何比较两个XML节点结构Delphi

有没有办法在Delphi中比较两个xml节点?

我正在使用MSXML解析器并将xml加载到IXmlDOMDocument2中.节点存储在IXmlDOMNode中.

如果有帮助的话,我可以使用Delphi的TXMLDocument.我不想下载任何第三方组件.

我只是想比较节点的结构,而不是值.

我看到了一个类似于Java的帖子/实用程序,但对于Delphi没什么.

谢谢!

xml delphi ixmldomnode txmldocument ixmldomdocument

5
推荐指数
1
解决办法
866
查看次数

字符串到 xmlNode delphi(或如何将 xml 片段添加到 TXMLDocument)

我有一些包含格式良好的 XML 的文本字符串。

我希望能够(1)将这些字符串转换为IXMLNodes(2)将它们附加到现有的XMLDocument. 最好不声明新的XMLDocument第一个。

这似乎不可能?

有没有什么简单的方法可以完成等效的事情?我最初的想法是使用IXMLNode.XML(string) 属性并插入新字符串。IXMLNode.XML只读则不然。

这是一个例子,如果我在 a 中有以下字符串TStringList

<Property Name="Version" RttiType="tkString"></Property>
<Property Name="ShowSubunit" RttiType="tkBoolean"></Property>
Run Code Online (Sandbox Code Playgroud)

我有以下 XML,已加载到 中TXMLDocument,我如何轻松地将上面的两行附加到下面TXMLDocument

<Program Name="PFOO">
  <Class Name="CFOO">
    <Property Name="DBN" RttiType="tkString"/>
    <Property Name="SDate" RttiType="tkClass" ClassType="TXSDATE">12/30/1899</Property>
    <Property Name="XForm" RttiType="tkEnumeration">xfXML</Property>
    <Property Name="Singleton" RttiType="tkBoolean">True</Property>
  </Class>
</Program>
Run Code Online (Sandbox Code Playgroud)

还有其他(简单)方法可以实现此目的(请不要对 XML 属性进行受保护的黑客攻击)?

谢谢你!

delphi msxml xmlnodelist xmlnode txmldocument

5
推荐指数
1
解决办法
5711
查看次数