Generating XML from XPath


Generating XML from XPath

我有一个需要基于XPath更新XML节点的示例。SimpleXMLElement通过使用XPath获取节点,然后以引用传递格式更新其值,使这一点变得非常简单。

然而,如果需要更新的节点实际上并不存在,那么这根本不起作用。如果XPath不存在,有没有简单的方法可以自动生成与之匹配的XML?

一个例子:

<example>
   <childNode1>green</childNode1>
</example>

考虑到XML,我可以很容易地运行xpath命令,通过将XML加载到SimpleXMLElement中,然后运行$xml->xpath("example/childNode1");来获得<childNode1>。然后,我可以将返回的SimpleXMLElement的值设置为新值,然后保存xml。

但是,如果我需要设置类似<childNode2>的内容,$xml->xpath("example/childNode2")将不返回任何内容,并且无法设置值或确认XML已构建。

迭代XPath并解析其值是确认每个子节点存在并在运行过程中构建它们的唯一方法吗?还是有更好的方法来生成必要的XPath?

XPath是一种查询语言,用于选择XML结构中的节点,并根据XML的内容计算值。它不具备能够编辑XML或创建automagic节点的功能。

PHP的SimpleXML和DOM都有XPath实现,并允许创建或更新XML结构;我想你知道它们,因为你谈论编辑节点(如果你不知道,我可以举一些例子)。要执行您建议的节点添加,您需要确定该节点是否存在(例如,如果example/node1的xpath查询返回了一个节点,但example/node2什么都不返回),创建一个新节点,并将其添加到XML树中。对于长xpath,例如example/apple/blueberry/canola/date/emblem/node1,您确实需要解析路径,检查哪些元素确实存在,并添加那些不存在的元素。

XQuery是一种功能更强大、功能更全的XML查询语言,XPath2和XPath是其中的一部分,它将能够转换XML。XQuery正在积极开发中,但不幸的是,目前的实现(截至2014年底)缺乏更新XML的能力。不过要注意这个空间!