使用xPath时是否可以忽略c#中的命名空间?

Exi*_*tos 14 xml xpath xsd xml-validation

我可以获得以下任一xml:

<?xml version="1.0" encoding="UTF-8"?>
<dc:video xmlns:dc="http://purl.org/dc/elements/1.1/">
  <dc:title>
    A vid with Pete
  </dc:title>
  <dc:description>
  Petes vid
  </dc:description>
  <dc:contributor>
    Pete
  </dc:contributor>
  <dc:subject>
    Cat 2
  </dc:subject>
</dc:video>
Run Code Online (Sandbox Code Playgroud)

要么:

<?xml version="1.0" encoding="UTF-8"?>
<video>
  <title>
    A vid with Pete
  <title>
  <description>
  Petes vid
  <description>
  <contributor>
    Pete
  <contributor>
  <subject>
    Cat 2
  <subject>
</video>
Run Code Online (Sandbox Code Playgroud)

我试图访问一个元素:

string title = xmlDocFromOneLan.SelectSingleNode(@"/video/title").InnerXml;
Run Code Online (Sandbox Code Playgroud)

但是对于xml文档1,它由于命名空间而无法工作.

c#中有没有办法使用xpath忽略命名空间?我只是想选择我真的不关心命名空间的节点.(命名空间可以是DC DN或DCN等).

"/视频"

会读到:

<video></video>
or
<dc:video></video>
or
<dcn:video></video>
Run Code Online (Sandbox Code Playgroud)

Mar*_*nen 42

使用XPath 1.0,您所能做的就是/*[local-name() = 'video']/*[local-name() = 'title'].使用XPath 2.0,您可以使用通配符/*:video/*:title.

  • Pete,XPath 1.0和2.0是您可以在线找到的W3C规范:http://www.w3.org/TR/xpath/,http://www.w3.org/TR/xpath20/.Microsoft仅支持XPath 1.0,它们在MSDN上有相关文档:http://msdn.microsoft.com/en-us/library/ms256115.aspx.XPath 2.0由第三方实施,如XQSharp http://www.xqsharp.com/或Saxon 9 http://saxon.sourceforge.net/.Saxon也有很好的文档,*:foo语法记录在http://www.saxonica.com/documentation/expressions/axissteps.xml中. (2认同)