Tôi đang cố xác định biểu thức XPath đúng để trả về giá trị của thuộc tính xsi:type
trên phần tử Body
. Tôi đã thử những gì có vẻ như tất cả mọi thứ mà không có may mắn. Dựa trên những gì tôi đọc, điều này có vẻ gần nhưng rõ ràng là nó không phải là chính xác. Bất kỳ hướng dẫn nhanh nào để tôi có thể đặt cuối cùng để nghỉ ngơi?Nhận giá trị của xsi: type với xpath
//v20:Body/@xsi:type
tôi muốn nó trở v20:SmsMessageV1RequestBody
<v20:MessageV1Request>
<v20:Header>
<v20:Source>
<v20:Name>SOURCE_APP</v20:Name>
<v20:ReferenceId>1326236916621</v20:ReferenceId>
<v20:Principal>2001</v20:Principal>
</v20:Source>
</v20:Header>
<v20:Body xsi:type="v20:SmsMessageV1RequestBody">
<v20:ToAddress>5555551212</v20:ToAddress>
<v20:FromAddress>11111</v20:FromAddress>
<v20:Message>TEST</v20:Message>
</v20:Body>
</v20:MessageV1Request>
Biểu thức Xpath có vẻ phù hợp với tôi. Bạn đang sử dụng XPath này trong XQUERY, một XSLT hay cái gì khác? Nguyên nhân có khả năng nhất của một vấn đề ở đây là sự nhầm lẫn gây ra bởi các tiền tố không gian tên. Một cách để loại bỏ không gian tên như là một nguồn gây nhầm lẫn là viết lại xpath như sau: // * [local-name() eq 'Body']/@ * [local-name() eq 'type'] –
Murray là đúng , vì thường có hai cách để xử lý các không gian tên trong XPath - đầu tiên: sử dụng các hàm XPath 'local-name()' và 'namespace-uri()', thứ hai: sử dụng các cơ chế thích hợp của công cụ XPath - ví dụ đối với JAXP chuẩn, bạn phải sử dụng NamespaceContext được cấu hình đúng cách ánh xạ các tiền tố tới các không gian tên. –