【问题标题】:XML: setting values of namespace elementsXML:命名空间元素的设置值
【发布时间】:2015-06-17 11:51:13
【问题描述】:

继续我之前的问题:simplexml_load_file does not recognize <dc:title> tags

您将如何为&lt;dc: 元素设置值?我设法打印了它的值,但我在网上看到 XML 解析器仅用于选择数据,而不是设置它。

编辑:使用simplexml_load_file() 和 PHP

我尝试使用 PHP 所做的基本上是将 &lt;dc:title&gt;test&lt;/dc:title&gt; 更改为 &lt;dc:title&gt;HELLO&lt;/dc:title&gt;,如果该标签 &lt;dc:title&gt; 不存在,则添加它。

【问题讨论】:

  • 你为什么要标记你的问题xslt?您想要使用 XSLT 的答案吗?
  • 因为我认为可能有使用 XSLT 的解决方案,所以我没有使用 XSLT 的经验。我希望解决方案尽可能简单。

标签: php xml xslt xml-parsing


【解决方案1】:

&lt;dc: 元素?

如链接问题的第一个答案中所述:dc 不是元素名称。它是一个命名空间名称。

要添加位于命名空间中的元素,请使用适用的方法(可能是重载)来指定命名空间。但是,这取决于您使用的解析器(并且您没有指定)。

例如。使用 .NET 的 LINQ to XML,您可以从命名空间的 URI 创建一个 XNamespace 实例,然后,当它重载 + 运算符时,您将其添加到元素名称之前:

var ns = new XNamespace(namespaceUri);
var newElement = doc.firstNode.Add(new XElement(ns + "ElementName"));

【讨论】:

  • 我使用过simplexml_load_file() 和 PHP,请查看我修改后的问题。
  • @odedta 我知道 XML 和一点 PHP,但不足以快速回答 PHP。尝试阅读 PHP 文档以了解 simplexml_load_file 返回的任何内容。
  • simplexml_load_file Interprets an XML file into an object,问题是 &lt;dc:title&gt; 不是一个有效的 XML 标签,它是一个命名空间,要选择这些标签的值,您需要注册一个命名空间,以便解释器知道什么他们是,问题是 xpath 只是一种查询语言,没有设置值的功能,因此我询问另一种解决方案。
  • @odedta 我认为你需要修正你的理解。 dc:title 绝对是一个有效的 XML 元素名称(命名空间中的“title”映射到标记“dc”)。如果该 PHP API 无法修改返回的对象模型,那么您可能需要查看不同的解析器。喜欢here 或使用simplexml_load_file。总结:1.您误解了XML命名(我回答的重点),2.您有API和其他选项,3我没有解决this question未提及的问题。
  • 是的,我的意思是,如果您使用var_dump,您需要定义一个命名空间以便在输出中查看它,这不是一个常规标签。我将尝试您提到的其他解析器,因为 AFAIK,simplexml_load_file 不适合这项工作。至于你最后的评论,我相信我的问题很简单直接。
猜你喜欢
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 2012-08-01
  • 1970-01-01
相关资源
最近更新 更多