我有一个示例,我需要根据 XPath 更新 XML 节点。 SimpleXMLElement
通过使用 XPath 获取节点,然后以引用传递格式更新其值,可以使此操作变得非常简单。
但是,如果需要更新的节点实际上不存在,则这根本不起作用。如果 XPath 不存在,是否有任何简单的方法可以自动生成与 XPath 匹配的 XML?
一个例子:
<example>
<childNode1>green</childNode1>
</example>
给定 XML,我可以轻松运行 xpath 命令来获取 <childNode1>
通过将 xml 加载到 SimpleXMLElement
然后运行$xml->xpath("example/childNode1");
。然后我可以设置返回的值 SimpleXMLElement
更改为新内容,然后保存 xml。
但是,如果我需要设置类似 <childNode2>
的内容$xml->xpath("example/childNode2")
将不返回任何内容,并且无法设置值或确认 XML 已构建。
迭代 XPath 并解析其值是确认每个子节点存在然后构建它们的唯一方法还是有更好的方法来生成必要的 XPath?
最佳答案
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 的能力。不过请注意这个空间!
关于php - 从 XPath 生成 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536690/