2013-06-26 2 views
0

Мне нужно получить атрибут из xml-файла в сценарии bash, но я не могу использовать ни xmllint -xpath, ни xmlstarlet, потому что они недоступны на сервере, где я работаю.Доступ к атрибуту xml в сценарии bash

Я пробовал решение с grep, cut и sed, но это не очень хорошее решение за долгое время.

Существует grep_xml доступен на машине, я могу Acces элементов с ним, но когда я пытаюсь получить доступ к своему атрибуту я получаю «непризнанное выражение ошибки в обработчике»

это мой XML-файл

<?xml version="1.0" standalone="yes"?> 
<p4codeline xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="p4codeline_1_1.xsd"> 
    <module name="kpreader" currentVersion="kpreader_1.1STD0" previousVersion="kpreader_1.0STD0"> 
    <codeline owner="undefined" path="//HEP/jcas/kpreader/trunk/..."> 
     <namingConvention/> 
     <description>Main codeline for development</description> 
     <rules> 
     <rule>Develop on MAIN, and create a TAG codeline on release</rule> 
     <rule>Never broke the build on the MAIN</rule> 
     </rules> 
    </codeline> 
    <externals> 
     <external viewPath="J2ep_BuildTools/..." codeLine="//CT/JAVA/J2ep_BuildTools/Source/tags/J2EP_BUILDTOOLS_1.6STD0/..." depotPath="."/> 
    </externals> 
    </module> 
</p4codeline> 

и мне нужно будет получить доступ к атрибуту пути в коделине только с помощью решения, основанного на bash или команде.

Я пытался что-то вроде

xml_grep -t '/p4codeline/module/codeline/@path' file.xml 

И answear мне

error: unrecognized expression in handler: '/p4codeline/module/[email protected]' at /usr/bin/xml_grep line 183 
+3

Да, не оставляйте нас в темноте. Если вы обратитесь к врачу, не говорите «Ой!». Быть конкретной. – Jens

+0

Каков вклад, что вы пытались до сих пор, что он напечатал, и что вы ожидали от него (или решения) для печати? Нам нужно больше деталей. – l0b0

+0

Для этого я бы использовал Perl + ваш XML-синтаксический анализатор. – m0skit0

ответ

1

Как эти вещи, как правило, идут, эта команда сильно зависит от вашего входа

$ awk '/path/ {print $4}' FS='"' file.xml 
//HEP/jcas/kpreader/trunk/... 
Смежные вопросы