zdałem sobie sprawę naprawdę głupiego filtr XPath w Matlab:deklaracja xmlns złamałam filtr XPath
% 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
Z tego XML (konkretnie .gpx pliku) to działa:
<?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>
i tekstowej (508) Zwraca 647-7000. prostu dodając atrybut xmlns do węzła gpx w ten sposób:
<?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>
dał mi błąd i raport Matlab:
??? Próba odwołania do pola tablicy non-structure.
Błąd w ==> badania w 12 PhoneNumber = phoneNumberNode.getTextContent
Dlaczego? Jak mogę uniknąć tego błędu?
nie wiem, Matlab, ale z punktu widzenia XML, umieściłeś teraz element gpx (etc.) w przestrzeni nazw http://www.topografix.com/GPX/1/1, a XPath szuka jej w globalnym obszarze nazw. Musisz jakoś udostępnić obszar nazw MatLab, a następnie zakwalifikować element gpx w wyrażeniu XPath. – Dabbler
Dobre pytanie, +1. Jeśli nie masz mechanizmów w Matlab, aby zarejestrować obszar nazw, możesz użyć takiego wyrażenia: '* [name() = 'gpx'] /* [name() = 'AddressBook'] /* [name() = 'Entry'] /* [name() = 'PhoneNumber'] ' –
@_Mariano: Czy moja odpowiedź była przydatna? –