delphi xmlchildnode从父节点获取属性

2024-03-09

我正在尝试用 Delphi 编写 XML。

如果我给一个节点一个 xmlns 属性,该节点的子节点也会显示该属性,但随后为空。如何防止子节点显示该属性?

我用下面的代码进行了测试

procedure TForm2.Button1Click(Sender: TObject);
var
  RootNode, CurNode, PmtNode, PmtDetNode : IXMLNODE;
  I:Integer;
begin
   SepaDoc := Newxmldocument;
   SepaDoc.Encoding := 'utf-8';
   SepaDoc.Options := [doNodeAutoIndent];
   RootNode := SepaDoc.AddChild('Document');
   CurNode := RootNode.AddChild('Child1');
   CurNode.Attributes['xmlns'] := 'apenootje';
   CurNode := CurNode.AddChild('Child2');
   CurNode := CurNode.AddChild('Child3');
   SepaDoc.SaveToFile('D:\indir\testsepa.xml');
end;

这会产生以下 XML

<?xml version="1.0" encoding="UTF-8"?>
-<Document>   -<Child1 xmlns="apenootje">
    -<Child2 xmlns="">
       <Child3/>
     </Child2>
    </Child1>    
  </Document>

谢谢 罗布·诺威


由于 Child1 的子元素不具有相同的命名空间,因此它必须是未声明的,这就是 Child2 持有空(默认)命名空间的原因。

这被称为命名空间未声明 http://en.wikipedia.org/wiki/XML_namespace#Namespace_undeclaration

当元素带有属性 xmlns="" 时,该元素及其后代的默认命名空间将恢复为“无命名空间”:也就是说,无前缀的名称被视为不在任何命名空间中。

XML 命名空间 1.1 还引入了取消声明其他命名空间前缀的选项。例如,如果属性 xmlns:p="" 出现在某个元素上,则命名空间前缀 p 不再处于该元素或其后代的范围内(因此不能使用),除非由另一个命名空间声明重新引入

话虽这么说,修复方法很简单;包括所有后续子节点上的名称空间:

program SO20424534;

{$APPTYPE CONSOLE}

uses
  ActiveX,
  XMLdom,
  XMLDoc,
  XMLIntf,
  SysUtils;

function TestXML : String;

var
  RootNode,
  CurNode    : IXMLNODE;
  Doc        : IXmlDocument;
  ns         : String;

begin
 Doc := Newxmldocument;
 ns := 'apenootje';
 Doc.Encoding := 'utf-8';
 Doc.Options := [doNodeAutoIndent];
 RootNode := Doc.AddChild('Document');
 CurNode := RootNode.AddChild('Child1');
 CurNode.DeclareNamespace('', ns);
 CurNode := CurNode.AddChild('Child2', ns);
 CurNode := CurNode.AddChild('Child3', ns);
 Result := Doc.XML.Text;
end;
    
begin
  try
   CoInitialize(nil);
   try 
    Writeln(TestXML);
   finally
    CoUninitialize;
   end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
 Readln;
end;

Output:

<?xml version="1.0"?>
<Document>
  <Child1 xmlns="apenootje">
    <Child2>
      <Child3/>
    </Child2>
  </Child1>
</Document>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

delphi xmlchildnode从父节点获取属性 的相关文章

随机推荐

  • Interface Builder 文件中的 Xcode 6 未知类 ViewController

    我已经删除了所有原始文件 Main storyboard ViewController M 和 ViewController H 并且创建了一个新的故事板 我有我的理由 但是当运行时错误产生 Interface Builder 文件中的未知
  • Active Directory 中的用户/组权限

    在哪里可以找到执行以下操作的示例 从 Active Directory 中提取用户 获取用户所属的组 获取分配给每个组的权限列表 这似乎是一个简单的任务 但我找不到解决方案 总体目标是分配自定义权限并使用它们来控制应用程序内的权限 如果您使
  • 如何在 OpenShift Origin 中安装 JBoss EAP 和 JBoss EWS 支持

    我在 CentOS 6 5 中使用 OpenShift Origin 创建了一个虚拟机 遵循 oo installer 指南 然而 当我遵循安装 JBoss EAP 和 JBoss EWS 支持 http openshift github
  • 使用 firebase-admin 时设置 FCM 高优先级

    我有以下代码 它使用 firebase admin 使用 Firebase 云消息传递发送消息 Message message null message Message builder putData From fromTel putDat
  • 移植到Lua 5.2,LUA_GLOBALSINDEX麻烦

    在代码示例中 http lua users org wiki SimplerCppBinding http lua users org wiki SimplerCppBinding 有代码 lua pushstring L T classN
  • HTTP 错误 403.4 - 禁止

    当我访问机器的本地主机时 我会看到以下屏幕 而当我在服务器中尝试相同的操作时 出现以下错误 HTTP 错误 403 4 禁止 您尝试访问的页面是 通过安全套接字层 SSL 进行保护 我尝试将 http 替换为 https 但我看到目录正在浏
  • 应用程序预启动初始化方法 Run on type WebActivator.ActivationManager 抛出异常

    我正在尝试在 IIS 上运行 ASP MVC 4 应用程序 当我从基本模板发布 MVC 4 应用程序时 除了向导创建的依赖项之外没有任何依赖项 应用程序可以正常工作 但是当我发布其他应用程序 即使用 WebActivator 和许多其他库
  • Kendo UI 网格突出显示所选行

    我有一个 Kendo 2013 2 716 网格 其中包含一个编辑命令 编辑按钮位于第一列 和 40 多个其他列 我没有为网格设置可选集 填充网格后 我可以将鼠标放在 编辑 命令列上 每个 编辑 按钮会依次突出显示 当我单击其中一个时 我的
  • Android:如何从手机导入联系人? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在申请联系方式 我希望将手机和 SIM 卡中存储的所有联系人导入到我的应用程序中 但我不知道如何编写代码 任何帮助和提示或有用答案的链
  • 如何从 PostgreSQL 删除模板数据库?

    postgres DROP DATABASE template postgis ERROR cannot drop a template database http www postgresql org docs 9 1 static ma
  • Spark中如何根据基于另一个RDD的函数过滤一个RDD?

    我是 Apache Spark 的初学者 我想过滤掉 RDD 中权重总和大于常数值的所有组 权重 图也是一个RDD 这是一个小型演示 要过滤的组存储在 groups 中 常量值为12 val groups sc parallelize Li
  • 如何在 Swift 中获取两个日期之间的天数数组? [复制]

    这个问题在这里已经有答案了 考虑我们有一个函数签名 func datesRange from Date to Date gt Date 哪个应该采取from日期和todate 实例并返回一个包含其参数之间的日期 天 的数组 如何实现 你可以
  • Pyinstaller 与 scipy.signal ImportError:DLL 加载失败

    使用 PyInstaller 3 3 Python 3 4 我编译了一个需要使用 scipy signal periodogram 函数的程序 它导致 exe 在启动时崩溃 我一直在 stack Overflow 和其他网站上搜索尝试包含正
  • c# Reflection - 查找集合的通用类型

    我正在反映一个属性 Blah 其类型是 ICollection public ICollection
  • 如何通过Docker连接本地MySQL服务器?

    这是一个关于如何通过 Docker 连接到本地服务的更普遍的问题 Github问题中有类似的问题here https github com docker docker issues 1143这似乎没有任何解决方案 我真正想要的是能够针对我的
  • 当数组不超过 50 个元素时,在 PostgreSql 中使用表而不是数组字段类型更好吗?

    或者更好地说 何时使用数组作为表中的字段数据类型 哪种解决方案可以提供更好的搜索结果 我避免使用数组有两个原因 通过在单元格中存储多个属性值 您违反了第一范式 理论上 每次需要处理数组的各个元素时 您都必须执行一些额外的 非 SQL 相关的
  • Visual Studio XML 摘要不起作用

    当我以前使用 Visual Studio 时 我可以使用 声明我的方法的摘要 它会自动生成所有标签并为任何参数添加一行 但是在安装 Visual Studio 2015 后我似乎不再能够这样做默认情况下 我需要在设置中启用某些功能吗 我正在
  • 为什么我不能使用uniform1f而不是uniform4f来设置vec4制服?

    我通过以下方式逐步学习WebGL这本书 https sites google com site webglbook 我尝试通过使用缓冲区来绘制三个点 gl ARRAY BUFFER 而不是循环 正如我之前在本书的其他示例中所做的那样 var
  • 如何在低于11的Api中设置View alpha? [复制]

    这个问题在这里已经有答案了 我需要为视图设置 alpha 它是 ImageButton 在触摸事件上我想设置 alpha 以便我可以看到它被按下 也许这方面有一些解决办法 它不适合我改变背景颜色 因为我的背景是图像 并且我不想更改该图像的
  • delphi xmlchildnode从父节点获取属性

    我正在尝试用 Delphi 编写 XML 如果我给一个节点一个 xmlns 属性 该节点的子节点也会显示该属性 但随后为空 如何防止子节点显示该属性 我用下面的代码进行了测试 procedure TForm2 Button1Click Se