Доступ к атрибутам из XML в оболочке - PullRequest
1 голос
/ 16 июля 2009

Я пытаюсь разобрать значения из виджета config.xml с помощью оболочки. Я хочу использовать sed для этой задачи. Если есть что-то, что сосет меньше , чем xsltproc, я хотел бы знать.

В этом примере я следую за значением атрибута id из config.xml ниже:

<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns="http://www.w3.org/ns/widgets" id="http://example.org/exampleWidget" version="2.0 Beta" height="200" width="200">
<name short="123">Foo Widget</name>
</widget>

Хотелось бы, чтобы все было так просто, как Атрибут Jquery : var id = $("widget").attr("id");

В настоящее время этот шелл-код, использующий xsltproc, не работает:

snag () {
TMP=$(tempfile)
cat << EOF > $TMP
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="utf-8" indent="no"/>
<xsl:template>
<xsl:value-of select="$1"/>
</xsl:template>
</xsl:stylesheet>
EOF

echo $(xsltproc $TMP config.xml)
rm -f $TMP
}

ID=$(snag "widget/@id")

if test "$ID" = "http://example.org/exampleWidget"
then
    echo Mission accomplished.
else
    echo "<$ID> is wrong."
fi

Ответы [ 4 ]

1 голос
/ 16 июля 2009

XMLStarlet (http://xmlstar.sourceforge.net/) - это хорошие инструменты командной строки, которые поддерживают такие запросы:

xmlstarlet sel -N w = пространство имен -T -t -m "/ w: widget / @ id" -v. -n config.xml

0 голосов
/ 26 августа 2009

Вам не нужен XSLT, если вы не выполняете преобразование. Если вам нужно только получить значение, используйте XPath.

Существует программа xpath, которая поставляется с модулем Perl XML :: XPath.

из оболочки: ID = $ (xpath config.xml 'string (/ widget / @ id)')

(Функция string () предназначена для получения только значения идентификатора.

/ widget / @ id само по себе возвращает "id = value")

Если вам нужно только произвести какой-то другой вывод в зависимости от значения, вы можете сделать все это в xslt. Есть также другие реализации XPath, доступные из другие языки сценариев: я использовал Java XPath от Rhino и Jython. Там также XQuery из командной строки с Saxon.

0 голосов
/ 16 июля 2009

</ XSL: шаблон>

0 голосов
/ 16 июля 2009

template match = "widget"

выберите значение = "@ id"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...