标签: default-namespace

使用XPath获取具有默认命名空间(无名称空间前缀)的元素

在这个SOAP XML文件中,如何7使用XPath查询?

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <HelloWorldResponse xmlns="http://tempuri.org/">
           <HelloWorldResult>7</HelloWorldResult>
        </HelloWorldResponse>
    </soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

此XPath查询无效//*[name () ='soap:Body'].

xml xpath xpathquery default-namespace

14
推荐指数
1
解决办法
2万
查看次数

scrapy response.xpath使用默认命名空间返回xml文档上的空数组,而response.re工作

我是新手,我正在玩scrapy shell尝试抓取这个网站:www.spiegel.de/sitemap.xml

我做到了

scrapy shell "http://www.spiegel.de/sitemap.xml"
Run Code Online (Sandbox Code Playgroud)

当我使用时,它工作得很好

response.body 
Run Code Online (Sandbox Code Playgroud)

我可以看到整个页面包括xml标签

但是例如:

response.xpath('//loc') 
Run Code Online (Sandbox Code Playgroud)

根本不会工作.

我得到的结果是一个空数组

response.selector.re('somevalidregexpexpression') 
Run Code Online (Sandbox Code Playgroud)

会工作

任何想法可能是什么原因?可能与编码有关吗?该网站不是utf-8

我在Win 7上使用python 2.7.我在另一个站点(dmoz)上尝试了xpath(),它工作正常.

python xml xpath scrapy default-namespace

9
推荐指数
1
解决办法
2257
查看次数

具有显式默认命名空间的XML文档的XPath和命名空间规范

我正在努力获得XPath表达式和命名空间规范的正确组合,这是package XML(argument namespaces)对于xmlns在顶部元素中定义了显式命名空间的XML文档所要求的.

UPDATE

感谢har07,我能够把它放在一起:

一旦查询名称空间,第一个条目ns还没有名称,这就是问题所在:

nsDefs <- xmlNamespaceDefinitions(doc)
ns <- structure(sapply(nsDefs, function(x) x$uri), names = names(nsDefs))

> ns
                                             omegahat                          r 
    "http://something.org"  "http://www.omegahat.org" "http://www.r-project.org" 
Run Code Online (Sandbox Code Playgroud)

所以我们只需指定一个充当前缀的名称(这可以是任何有效的R名称):

names(ns)[1] <- "xmlns"
Run Code Online (Sandbox Code Playgroud)

现在,我们所要做的就是在XPath表达式中的任何地方使用默认名称空间前缀:

getNodeSet(doc, "/xmlns:doc//xmlns:b[@omegahat:status='foo']", ns)
Run Code Online (Sandbox Code Playgroud)

对于那些对基于name()namespace-uri()(以及其他)的替代解决方案感兴趣的人可能会发现此帖有用.


仅仅是为了参考:在我们找到解决方案之前,这是试错代码:

考虑以下示例?xmlParse:

require("XML")

doc <- xmlParse(system.file("exampleData", "tagnames.xml", package = "XML"))

> doc
<?xml version="1.0"?>
<doc>
  <!-- A comment -->
  <a xmlns:omegahat="http://www.omegahat.org" xmlns:r="http://www.r-project.org">
    <b>
      <c>
        <b/>
      </c> …
Run Code Online (Sandbox Code Playgroud)

xml xpath namespaces r default-namespace

5
推荐指数
1
解决办法
4676
查看次数

解析包含默认命名空间的xml以使用lxml获取元素值

我有一个像这样的xml字符串

str1 = """<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
    <loc>
        http://www.example.org/sitemap_1.xml.gz
    </loc>
    <lastmod>2015-07-01</lastmod>
</sitemap>
</sitemapindex> """
Run Code Online (Sandbox Code Playgroud)

我想提取<loc>节点内存在的所有网址,即http://www.example.org/sitemap_1.xml.gz

我尝试了这段代码,但没有说出来

from lxml import etree
root = etree.fromstring(str1)
urls = root.xpath("//loc/text()")
print urls
[]
Run Code Online (Sandbox Code Playgroud)

我试图检查我的根节点是否正确形成.我尝试了这个并获得与str1相同的字符串

etree.tostring(root)

'<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n<sitemap>\n<loc>http://www.example.org/sitemap_1.xml.gz</loc>\n<lastmod>2015-07-01</lastmod>\n</sitemap>\n</sitemapindex>'
Run Code Online (Sandbox Code Playgroud)

python xml lxml elementtree default-namespace

5
推荐指数
1
解决办法
1763
查看次数