Я пытаюсь использовать функции XDOM UniVerse для анализа XML-файла, но я не могу его правильно обработать XML, который использует пространство имен по умолчанию. Он может корректно обрабатывать XML без пространств имен или с именами пространств имен, но если есть пространство имен по умолчанию, все xPaths не смогут найти узлы, которые должны совпадать.UniVerse XDOM Trouble с пространствами имен по умолчанию
Чтобы дать простой пример, я, пытаясь разобрать этот XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore xmlns="http://www.example.com">
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
С помощью этого кода:
PROGRAM XDOM.TEST
$INCLUDE SYSCOM XML.H
OPEN "XML" TO F.XML ELSE STOP "OPEN FAILED"
READ XML FROM F.XML, 'TEST.xml' ELSE STOP "READ FAILED"
EXIT.PROG = @FALSE
CONVERT @FM TO CHAR(10) IN XML
IF NOT(EXIT.PROG) AND XDOMOpen(XML, XML.FROM.STRING, XDOM) # XML.SUCCESS THEN GOSUB XML.ERR
IF NOT(EXIT.PROG) AND XDOMLocate(XDOM, '/bookstore/book[@category="CHILDREN"]', 'xmlns=http://www.example.com', XNODE) # XML.SUCCESS THEN GOSUB XML.ERR
IF NOT(EXIT.PROG) AND XDOMEvaluate(XNODE, './author', 'xmlns=http://www.example.com', AUTHOR) # XML.SUCCESS THEN GOSUB XML.ERR
IF NOT(EXIT.PROG) then PRINT AUTHOR
STOP
XML.ERR:
XML.CODE = ''
XML.ERR = ''
EXIT.PROG = @TRUE
IF XMLGetError(XML.CODE, XML.ERR) = XML.SUCCESS THEN
PRINT XML.CODE
PRINT XML.ERR
END
RETURN
END
Когда я запускаю этот код, как есть, я получаю выход :
10
The location path '/bookstore/book[@category="CHILDREN"]' was not found.
Однако, если удалить "Xmlns = http://www.example.com" пространства имен, он отлично работает.
Благодарим за предоставление различных решений. Я пошел с решением в ссылку, которую вы предоставили, поскольку это не связано с изменением XML-документа, но оба будут работать нормально. –