2015-10-20 7 views
1

Это часть моего XML:Извлечение атрибутов из файла XML с помощью xmllint

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<nlpcmp> 
<word string="getuserscount" occurrences="2"> 
    <systems> 
    <system name="mks"> 
    <pos file="IrcChannel.cpp" part="adjective" line="414" occ="2"/> 
    </system> 
    </systems> 
</word> 
<word string="setuserprivilege" occurrences="2" > 
    <systems> 
    <system name="mks"> 
    <pos file="IrcChannel.cpp" part="adjective" line="375" occ="2"/> 
    </system> 
    </systems> 
</word> 
<word string="hasprivilege" occurrences="2" > 
    <systems> 
    <system name="mks"> 
    <pos file="IrcChannel.cpp" part="verb" line="360" occ="2"/> 
    </system> 
    </systems> 
</word> 
<word string="partmessage" occurrences="2" > 
    <systems> 
    <system name="TEST"> 
    <pos file="IrcChannel.cpp" part="verb" line="308" occ="2"/> 
    </system> 
    </systems> 
</word> 
</nlpcmp> 

Я пытаюсь найти список строк для систем, которые называют MKS только с использованием xmllint

вывод должен дать мне:

getuserscount 
setuserprivilege 
hasprivilege 

поэтому я попробовал эту команду:

xmllint --xpath 'string(//nlpcmp/word/@name)' file.xml 

и не было никакого вывода, то я попробовал:

xmllint --xpath "//*[local-name()='word'][system/@name[mks]" file.xml 

и говорит: XPath ошибка: Invalid предикат xmlXPathEval: оценка не удалось

Затем я попытался

xmllint --xpath "//*[local-name()='word']" file.xml 

и он дал мне все содержимое тега «word», чего я не хочу. Мне нужны строки. Как я могу это сделать?

ответ

2

Эта команда xmllint

xmllint --xpath "/nlpcmp/word[systems/system/@name = 'mks']/@string" file.xml 

даст этот выход

getuserscount 
setuserprivilege 
hasprivilege 

в соответствии с просьбой.

+0

Это сработало отлично! Большое спасибо! – Developer

Смежные вопросы