从XPath生成XML

时间:2014-10-23 20:20:14

标签: php xml xpath

我有一个示例,我需要基于XPath更新XML节点。 SimpleXMLElement通过使用XPath获取节点然后以传递引用格式更新其值,使这很容易。

但是,如果节点实际上不存在需要更新,则根本不起作用。是否有任何简单的方法可以自动生成与XPath匹配的XML(如果它不存在?)

一个例子:

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

鉴于XML,我可以通过将xml加载到<childNode1>然后运行SimpleXMLElement来轻松运行xpath命令来获取$xml->xpath("example/childNode1");。然后我可以将返回的SimpleXMLElement的值设置为新的值,然后保存xml。

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

迭代XPath并解析其值是唯一的方法来确认每个子节点是否存在,然后在它出现时构建它们还是有更好的方法来生成必要的XPath?

1 个答案:

答案 0 :(得分:2)

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

PHP的SimpleXML和DOM都有XPath实现,允许创建或更新XML结构;我假设您在谈论编辑节点时了解它们(如果您不这样做,我可以提供示例)。要执行您提议的那种节点添加,您需要确定该节点是否存在(例如,如果example/node1的xpath查询返回了一个节点,但example/node2没有返回任何内容),则创建一个新节点节点,并将其添加到XML树。对于长xpath,例如example/apple/blueberry/canola/date/emblem/node1,您确实必须解析路径并检查哪些元素确实存在,并添加那些不存在的元素。

XQuery是一种功能更强大,功能齐全的XML查询语言,XPath 2和XPath是其中的一部分,它将具有转换XML的能力。 XQuery正在积极开发中,但不幸的是,当前的实现(截至2014年底)缺乏更新XML的能力。尽管看这个空间!