【问题标题】:Delphi XML - obtaining a value from parent nodeDelphi XML - 从父节点获取值
【发布时间】:2012-05-12 20:31:24
【问题描述】:

我是在 Delphi 中使用 XML 的新手,并且已经使用已经发布的问题来找出我需要知道的大部分内容(谢谢!)。但是......我正在努力从我们的供应商之一发布的 XML 文件的顶部获取数据值。

XML 文件的顶部如下所示:

<?xml version="1.0" encoding="utf-8"?>
<form billId="1004" penId="ABCDE" appName="Report Sheet" penSerialNo="AJX-AAT-AGK-B4" >
<question id="1" reference="site_name" value="Acme Inc" /></question>
<question id="2" reference="site_address" value="London" /></question>
<question id="3" reference="TQM_job_no" value="AB1234567" /></question>
<question id="4" reference="TQM_site_no" value="XX999" /></question>

如何获取 penIdpenSerialNo 值?

作为参考,我使用下面的代码,从网站上的另一个帖子中获得,遍历 XML 并从 question 节点获取值:

for i:= 0 to XMLDocument1.DocumentElement.ChildNodes.Count - 1 do
   begin
       Node:= XMLDocument1.DocumentElement.ChildNodes[I];
 if Node.NodeName = 'question' then
  begin
   if Node.HasAttribute('value') then
    VALUEvar:= Node.Attributes[value'];
    // do something with VALUEvar which is a string
      end;
end;
end;

如果能提供任何帮助,我将不胜感激......提前致谢!

【问题讨论】:

  • 只需将'question' 更改为'form' 并将'value' 更改为'penId'。你试过吗?不是最佳解决方案,但我想知道您是否尝试过。
  • 嗨,是的,我确实尝试过,但没有成功。我添加了这行代码: if Node.NodeName = 'form' then showmessage('Hello World');但是此消息从未显示,因此我不知道如何获得所需的属性值>>
  • 使用&lt;tag attr="value" /&gt;&lt;/tag&gt;是否有效?
  • form 节点是根节点。你必须使用像xml.documentElement.Attributes['penId'] 这样的代码来获取它的属性

标签: xml delphi


【解决方案1】:

由于form 是您的根节点,您可以使用如下内容:

uses
  XMLDoc, XMLIntf;

procedure TForm1.Button1Click(Sender: TObject);
var
  XMLDocument: IXMLDocument;
begin
  XMLDocument := LoadXMLDocument('c:\YourFile.xml');
  if XMLDocument.DocumentElement.HasAttribute('penId') then
    ShowMessage(VarToStr(XMLDocument.DocumentElement.Attributes['penId']));
  if XMLDocument.DocumentElement.HasAttribute('penSerialNo') then
    ShowMessage(VarToStr(XMLDocument.DocumentElement.Attributes['penSerialNo']));
end;

无论如何,您的文档无效。您不能使用以下括起来的标签:

<tag attr="value"/></tag>

任意使用:

<tag attr="value"/>

<tag attr="value"></tag>

【讨论】:

  • 感谢根节点的回答,非常感谢,这完全符合要求。我没有创建 XML,所以我已经向供应商咨询了标签。
  • 供应商运送产生畸形 XML 的产品,我希望这种情况很少见,但事实并非如此。
  • 我已经看到了使用普通字符串生成 XML 的应用程序的可怕之处。是的,它在那里。我猜那个 XML 示例有一些问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多