tôi đã nhận ra một bộ lọc xPath thực sự ngu ngốc trong Matlab:khai xmlns đã phá vỡ lọc xPath tôi
% Construct the DOM.
docNode = xmlread('C:\Users\MATLAB\test.gpx');
% get the xpath mechanism into the workspace
import javax.xml.xpath.*
factory = XPathFactory.newInstance;
xpath = factory.newXPath;
% compile and evaluate the XPath Expression
expression = xpath.compile('gpx/AddressBook/Entry/PhoneNumber');
phoneNumberNode = expression.evaluate(docNode, XPathConstants.NODE);
phoneNumber = phoneNumberNode.getTextContent
Với XML này (cụ thể là một file .gpx) nó hoạt động:
<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>
<gpx version='1.1' creator='TTTracklog V.1.13'>
<AddressBook>
<Entry>
<Name>Friendly J. Mathworker</Name>
<PhoneNumber>(508) 647-7000</PhoneNumber>
<Address hasZip="no" type="work">3 Apple Hill Dr, Natick MA</Address>
</Entry>
</AddressBook>
</gpx>
và văn bản (508) 647-7000 được trả lại. xmlns Đơn giản chỉ cần thêm thuộc tính cho nút GPX theo cách này:
<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>
<gpx version='1.1' creator='TTTracklog V.1.13' xmlns='http://www.topografix.com/GPX/1/1'>
<AddressBook>
<Entry>
<Name>Friendly J. Mathworker</Name>
<PhoneNumber>(508) 647-7000</PhoneNumber>
<Address hasZip="no" type="work">3 Apple Hill Dr, Natick MA</Address>
</Entry>
</AddressBook>
</gpx>
đã cho tôi lỗi, và báo cáo matlab:
??? Cố gắng tham chiếu trường của mảng không cấu trúc.
Lỗi trong ==> kiểm tra tại 12 PhoneNumber = phoneNumberNode.getTextContent
Tại sao? Làm thế nào tôi có thể tránh được lỗi đó?
Tôi không biết Matlab, nhưng từ một quan điểm XML, bây giờ bạn đã đặt phần tử gpx (v.v.) của bạn trong không gian tên http://www.topografix.com/GPX/1/1 và XPath đang tìm kiếm nó trong không gian tên chung. Bạn cần bằng cách nào đó làm cho không gian tên được biết đến với MatLab và sau đó đủ điều kiện phần tử gpx trong biểu thức XPath. – Dabbler
Câu hỏi hay, +1. Trong trường hợp bạn không có cơ chế trong Matlab để đăng ký một không gian tên, bạn có thể sử dụng một biểu thức như sau: '* [name() = 'gpx'] /* [name() = 'AddressBook'] /* [name() = 'Entry'] /* [name() = 'PhoneNumber'] ' –
@_Mariano: Câu trả lời của tôi có hữu ích không? –