标签: xpath

如何将XPath与没有前缀的默认命名空间一起使用?

什么是XPath(在C#API中XDocument.XPathSelectElements(xpath,nsman),如果重要的话)查询此文档中的所有MyNode?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <MyNode xmlns="lcmp" attr="true">
    <subnode />
  </MyNode>
</configuration>
Run Code Online (Sandbox Code Playgroud)
  • 我试过/configuration/MyNode这是错误的,因为它忽略了命名空间.
  • 我试过/configuration/lcmp:MyNode哪个是错的,因为lcmp是URI,而不是前缀.
  • 我试过/configuration/{lcmp}MyNode哪个失败了因为Additional information: '/configuration/{lcmp}MyNode' has an invalid token.

编辑:我不能mgr.AddNamespace("df", "lcmp");像一些回答者所建议的那样使用.这要求XML解析程序知道我计划提前使用的所有命名空间.由于这适用于任何源文件,我不知道手动添加前缀的命名空间.它似乎{my uri}是XPath语法,但微软并没有打算实现那个......是真的吗?

c# xpath linq-to-xml xml-namespaces

34
推荐指数
3
解决办法
3万
查看次数

XPathSelectElement始终返回null

为什么这个Xpath无法使用XDocument.XPathSelectElement?

Xpath的:

//Plugin/UI[1]/PluginPageCategory[1]/Page[1]/Group[1]/CommandRef[2]
Run Code Online (Sandbox Code Playgroud)

XML

<Plugin xmlns="http://www.MyNamespace.ca/MyPath">
  <UI>
    <PluginPageCategory>
      <Page>
        <Group>
          <CommandRef>
            <Images>
            </Images>
          </CommandRef>
          <CommandRef>
            <Images>
            </Images>
          </CommandRef>
        </Group>
      </Page>
    </PluginPageCategory>
  </UI>
</Plugin>
Run Code Online (Sandbox Code Playgroud)

C#代码:

myXDocument.XPathSelectElement("//Plugin/UI[1]/PluginPageCategory[1]/Page[1]/Group[1]/CommandRef[2]", myXDocument.Root.CreateNavigator());
Run Code Online (Sandbox Code Playgroud)

c# xml xpath

34
推荐指数
3
解决办法
2万
查看次数

获取xpath结果集中的第一个节点

我试图在执行xpath查询后选择一组结果节点中的第一个元素.

当我这样做:

//dl
Run Code Online (Sandbox Code Playgroud)

我得到以下结果集:

[<dl>?…?</dl>?, <dl>?…?</dl>?]
Run Code Online (Sandbox Code Playgroud)

我如何获得第一个?这些都不起作用:

//dl[1]
//dl[position()=1]
Run Code Online (Sandbox Code Playgroud)

我正在Chrome的Web Inspector中执行此操作.

xpath

34
推荐指数
1
解决办法
3万
查看次数

如何使用Python ElementTree提取xml属性

对于:

<foo>
 <bar key="value">text</bar>
</foo>
Run Code Online (Sandbox Code Playgroud)

我如何获得"价值"?

xml.findtext("./bar[@key]")
Run Code Online (Sandbox Code Playgroud)

引发错误.

python xml xpath elementtree

33
推荐指数
2
解决办法
7万
查看次数

Xpath使用start-with函数

我在Android上编写Java以从XML文件中检索数据,但我遇到了问题.考虑这个XML:

<ITEM>
   <REVENUE_YEAR>2554-02</REVENUE_YEAR>
   <REGION>Central</REGION>
</ITEM>
<ITEM>
  <REVENUE_YEAR>2552-02</REVENUE_YEAR>
  <REGION>Central</REGION>
</ITEM>
<ITEM>
  <REVENUE_YEAR>2552-03</REVENUE_YEAR>
  <REGION>Central</REGION>
</ITEM>
Run Code Online (Sandbox Code Playgroud)

如何在2552年开始的年份中获得所有元素.我试过:

//REVENUE_YEAR[starts-with(.,'2552')]/text()
Run Code Online (Sandbox Code Playgroud)

它有效,但当我尝试时:

//REVENUE_YEAR[starts-with(.,'2552')]/REGION/text() 
Run Code Online (Sandbox Code Playgroud)

它不起作用.

xpath

33
推荐指数
3
解决办法
10万
查看次数

SimpleXML:选择具有特定属性值的元素

在XML文档中,我有共享相同名称的元素,但属性的值定义了它的数据类型,我想从文档中选择所有具有特定值的元素.我是否需要使用XPath(如果是这样,您能建议正确的语法)还是有更优雅的解决方案?

这是一些XML示例:

<object>
  <data type="me">myname</data>
  <data type="you">yourname</data>
  <data type="me">myothername</data>
</object>
Run Code Online (Sandbox Code Playgroud)

我想选择所有类型的<data>孩子的内容.<object>me

PS - 我正在尝试使用PHP与Netflix API进行交互 - 这对我的问题无关紧要,但如果你想提出一个好的/更好的方法,我会全力以赴.

php xml xpath simplexml netflix

32
推荐指数
2
解决办法
3万
查看次数

xpath中// node和/ descendant :: node之间有什么区别?

我在使用Selenium在网页中定位元素时使用了大量的XPath,并且最近已经从使用node1 // node2转向使用node1/descendant :: node2.这两种方法有什么区别?一个比另一个更有效吗?

用于演示的示例XML代码段:

<div id="books">
  <table>
    <tr><td class="title">Lord of the Rings</td><td class="author">JRR Tolkein</td></tr>
    <tr><td class="title">The Hitch-Hikers Guide to the Galaxy</td><td class="author">Douglas Adams</td></tr>
  </table>
</div>
Run Code Online (Sandbox Code Playgroud)

所以它是:

id('books')//td[@class='title']

要么:

id('books')/descendant::td[@class='title']

xpath

32
推荐指数
3
解决办法
5万
查看次数

jsoup支持xpath吗?

正在进行一些与向jsoup https://github.com/jhy/jsoup/pull/80添加xpath支持相关的工作.

  • 它有效吗?
  • 我怎么用呢?

xpath jsoup

32
推荐指数
1
解决办法
3万
查看次数

如何使用XPath获取节点值/ innerHTML?

我有一个XPath来选择我想要的类://div[@class='myclass'].但它返回给我整个div(<div class='myclass'>也有,但我想只返回这个标签的内容而没有标签本身.我怎么能这样做?

xml xpath parsing html-parsing

32
推荐指数
3
解决办法
7万
查看次数

Internet Explorer中的DOM Level 3 XPath

我刚安装IE10在我的Windows 7,而且我发现,即使我很高兴,从AJAX请求个XML现在可以兼容DOM文档,就像一个相当基本的功能document.evaluate仍然不支持.

更糟糕的是,由于这些个XML是不是定制的微软IXMLDocument对象,节点不支持selectNodesselectSingleNode了.最后,似乎IE10不支持DOM Level 3 XPath或MSXML Xpath.

说真的,微软?有什么我想念的吗?

当然,我可以使用querySelectorquerySelectorAll,但我不想失去相当多的向后兼容性.

否则,仍然可以使用此行请求MSXML文档

try {xhr.responseType = "msxml-document";} catch(e) {}
Run Code Online (Sandbox Code Playgroud)

如规定在这里,但我认为这将是很好对付,最后,在IE标准DOM文档了.

那么,有没有办法在IE10中使用带有标准DOM文档的XPath?

更新2013年6月26日 IE11尚未稳定,但仍然不支持document.evaluate.如果它不支持它在稳定的版本,我怀疑它会永远支持它.毋庸置疑,这是荒谬的.

我知道你可以在DOM节点中使用querySelector/ All,但它在IE9及更低版本中不受支持,这仍然是非常常用的,无论如何XPath比选择器更强大.

幸运的是(如果可以这么说),你仍然可以设置xhr.responseType = "msxml-document".有那么一刻,我担心你再也不能那样做了......

更新23/11/2013 IE11现在稳定,但遗憾的是,它不支持document.evaluate.随着重量级XML文档在Web应用程序中越来越少地使用JSON或其他光表示法格式,这变得不那么成问题了,但仍然如此.

设置responseType属性仍然提供遗留的XML文档,所以我猜没有丢失.不过,我不知道IE12是否会成立.

更新15/8/2015现在听起来很荒谬,但Edge现在支持document.evaluate.就在(几乎)一切都切换到JSON进行数据交换时.嗯,迟到总比没有好,我想.

internet-explorer xpath msxml xmldom dom3

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