Câu hỏi Có thể bỏ qua các không gian tên trong c # khi sử dụng xPath không?


Tôi có thể được cung cấp một trong các xml sau:

<?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>

Hoặc là:

<?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>

Tôi đang cố truy cập phần tử:

string title = xmlDocFromOneLan.SelectSingleNode(@"/video/title").InnerXml;

Nhưng với tài liệu xml 1 nó không hoạt động do không gian tên.

Có cách nào trong c # để bỏ qua không gian tên bằng cách sử dụng xpath? Tôi chỉ muốn chọn nút mà tôi thực sự không quan tâm đến không gian tên. (không gian tên có thể là DC DN hoặc DCN, v.v.).

"/video"

sẽ đọc:

<video></video>
or
<dc:video></video>
or
<dcn:video></video>

13
2017-11-30 12:05


gốc


Bạn có thể sử dụng Namespace = false trên XmlTextReader xem: stackoverflow.com/a/49361232/9516092 - Pierre Vonderscher


Các câu trả lời:


Với XPath 1.0, tất cả những gì bạn có thể làm là /*[local-name() = 'video']/*[local-name() = 'title']. Với XPath 2.0, bạn có thể sử dụng ký tự đại diện /*:video/*:title.


39
2017-11-30 12:24



Cảm ơn Martin, bạn có biết tôi có thể lấy tài liệu liên quan đến điều đó ở đâu không? - Exitos
Pete, XPath 1.0 và 2.0 là các thông số W3C bạn có thể tìm thấy trực tuyến: w3.org/TR/xpath, w3.org/TR/xpath20. Microsoft chỉ hỗ trợ XPath 1.0, họ có tài liệu về điều đó trên MSDN: msdn.microsoft.com/en-us/library/ms256115.aspx. XPath 2.0 được thực hiện bởi các bên thứ ba như XQSharp xqsharp.com hoặc Saxon 9 saxon.sourceforge.net. Saxon cũng có một tài liệu tốt, cú pháp *: foo được ghi lại tại saxonica.com/documentation/expressions/axissteps.xml. - Martin Honnen