2013-06-13 2 views
2

У меня есть XML, как показано ниже, и я пытаюсь извлечь узлы на основе ключевого слова. Пробовал использовать XPath и XMLLint. Но, очевидно, я ничего не делаю. Итак, надеясь на некоторую помощь в этом отношении.Извлечь узлы из xml на основе ключевых слов

XML File

<section> 
    <h>2 Introduction</h1> 
    <region>Intro 1</region> 
    <region>Background</region> 
    </section> 
<article> 
<body> 
    <section> 
    <h1>2 Task objectives</h1> 
    <region>2.1 Primary objectives </region> 
    <region>2.</region> 
    </section> 

    <section> 
    <h2>Requirements</h1> 
    <region>System Requirements </region> 
    <region>Technical Requirements</region> 
    </section> 

    <section> 
    <h3>Design</h1> 
    <region>Design methodology </region> 
    <region>Design patterns</region> 
    </section> 
    </body> 
</article> 

Учитывая этот XML и ключевое слово Task objectives или objectives (Case нечувствительны), мне нужно, чтобы извлечь весь узел и записать в другой XML-файл

<section> 
    <h1>2 Task objectives</h1> 
    <region>2.1 Primary objectives </region> 
    <region>2.</region> 
</section> 

экстракционного Я попробовал использовать Xpath и XMllint.

$ xmllint --xpath //body//section//h1[.="Task objectives"] Prior.mod.xml 
XPath error : Invalid predicate 
//body//section//h1[.=Task objectives] 
       ^
xmlXPathEval: evaluation failed 
XPath evaluation failure 

Может кто-нибудь пожалуйста, дайте мне знать, что случилось с выше, и как я могу исправить это? Кроме того, я хотел бы сделать это в оболочке в каталоге файлов. Является ли XMLlint опцией ?

ответ

2

Оболочка удаления цитаты (") символов во время командной строки синтаксического анализа - нужно цитировать все выражение, как в

xmllint --xpath '//body//section//h1[.="Task objectives"]' Prior.mod.xml 

Пример:

$ xmllint --xpath //body//section//h1[.="Task objectives"] - 
<body> 
<section> 
<h1>Task objectives</h1> 
<h1>abcd</h1> 
</section> 
</body> 
^D 

Результирующее в:

XPath error : Invalid predicate 
//body//section//h1[.=Task objectives] 
         ^
xmlXPathEval: evaluation failed 
XPath evaluation failure 

Обратите внимание на недостающие кавычки. Затем я попытался

$ xmllint --xpath '//body//section//h1[.="Task objectives"]' - 
<body> 
<section> 
<h1>Task objectives</h1> 
<h1>abcd</h1> 
</section> 
</body> 
^D 

который произвел выход

<h1>Task objectives</h1> 
+0

Благодаря этим работал. – BRZ

0

Это работает для меня с XPath 1.0:

//section[contains(
    translate(h1, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 
    'task objectives') 
] 
Смежные вопросы