取代“:“通过“_"在XML标签中


Replace ":" by "_" in XML Tagnames

我使用的XML可以在这里找到:http://www.politie.nl/rss/ab/gemeenten/zuid-holland/rotterdam.xml。

问题是有很多带有:的标签。我们想用_代替:。像rdf:about, dc:date, rdf:resources这样的标签应该变成rdf_about, dc_daterdf_resources

我们正在使用PHP和simplexml.

简短的回答是,如果您将此XML作为XML使用,那么您真的不应该尝试这样做。XML QName是一个URI,它通过连接与前缀(:之前的部分)和本地名称(:之后的部分)相关联的名称空间来构建。这意味着当您看到这样的XML时:

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
     version="2.0">
  <channel>
    <dc:date>2013-06-07T13:02:42Z</dc:date>
    <dc:language>nl</dc:language>

您有一个名为rss的元素包含一个名为channel的元素,其中包含名为http://purl.org/dc/elements/1.1/datehttp://purl.org/dc/elements/1.1/language的元素。您确实不希望对其进行任何修改,因为这些uri提供了这些元素的含义。由于:实际上不是命名元素的结果URI的一部分,因此讨论替换元素名称中的:是没有意义的,因为它从一开始就不存在。

如果您真的想放弃所有的语义信息,当然,您可以使用XML处理库来读取您拥有的XML,并编写新的XML,将所有的http://purl.org/dc/elements/1.1/language替换为dc_language元素,但是很难看到其中的实用程序。