2009-10-16 16 views
6

Tôi có một tài liệu XML mà tôi tải vào và cố gắng tìm kiếm bằng XPath. Nút gốc trong tệp này là <t:Transmission xmlns:t='urn:InboundShipment'> và cuối tệp được đóng đúng với </t:Transmission>.Phân tích cú pháp XML: Dấu hai chấm trong nguyên tố của tôi khiến XPath bỏ lỡ nó

Vấn đề của tôi là tôi không thể đi bộ cây mà không sử dụng trục con cháu. Nói cách khác, tôi có thể làm: SelectSingleNode("//TransactionHeader[SHIPPERSTATE='CA']") và nhận lại một nút. Nhưng tôi không thể làm gì tương đương: SelectSingleNode("/Transmission/TransmissionBody/Transaction/TransactionHeader[SHIPPERSTATE='CA']")

Nếu tôi xóa t: Tôi có thể thực hiện tìm kiếm XPath trên /Transmission và nhận toàn bộ tệp. Với t: trong đó tôi chỉ nhận được null. Hoặc nếu tôi thử SelectSingleNode("t:Transmission") tôi gặp lỗi với tuyên bố XPath của mình.

Tôi thường không cần truy vấn phần tử gốc, vì vậy tôi có thể thực hiện chỉ bằng cách sử dụng trục con cháu cho tìm kiếm của tôi. Nhưng XML có vẻ hợp lệ với tôi và vì vậy tôi muốn biết cách giải quyết vấn đề này. Ngoài ra, tôi không muốn yêu cầu khách hàng xóa "t:" chỉ vì tôi không biết cách xử lý nó.

Trả lời

8

"t:" là tiền tố không gian tên, được gắn với không gian tên 'urn: InboundShipment.' Để xử lý đúng, bạn phải thông báo cho C# biết tiền tố bị ràng buộc là gì. This page nên giải thích cách sử dụng System.Xml.XmlNamespaceManager để xử lý không gian tên.

Chỉnh sửa: Xem this answer, là tốt.

+0

Tuyệt vời, cảm ơn James! Tài liệu tham khảo tuyệt vời, quá. –

Các vấn đề liên quan