Экспорт определенного значения атрибута всех узлов xml в другой файл

У меня есть XML документ с такой структурой:

<root>
    <parent id="idvalue1" attr1="val1" attr2="val2" ...>
        <child attr3="val3" attr4="val4" ... />
        <child attr3="val5" attr4="val6" ... />
        ...
    </parent>
    <parent id="idvalue2" attr1="val7" attr2="val8" ... />
    ...
</root>

Я хочу получить список всех значений id атрибуты всех узлов, которые имеют его. На данный момент можно предположить, что только элементы второго уровня будут иметь id приписывать.

В любом случае, что было бы оптимальным способом сделать это? это xmllint, xpath или же xmlstarlet?

2 ответа

Решение

Вы можете использовать xmlstarlet для вывода списка:

    xmlstarlet sel -t -v "//@id" yourfile.xml

Это будет выводить только значения ID, однако.

Опция -t "создает" XSLT, как предложено в ответе Абеля. Но вывод будет только то, что вы выбираете с sel команда. Опция -v - вывести значение xpath в кавычках. Двойная косая черта в выражении xpath вызывает все узлы.

Я хочу получить список всех значений атрибутов id всех узлов, которые его имеют.

С XPath вы можете использовать выражение, подобное следующему:

//@id

что я думаю довольно легко. Если вам нужен какой-то макет, вы можете использовать XSLT:

<xsl:template match="/">
    <xsl:apply-templates select="//@*" />
</xsl:template>

<xsl:template match="@id">
    <xsl:text>Id is: </xsl:text>
    <xsl:value-of select="." />
    <xsl:text>&#xA;</xsl:text>
</xsl:text>

который даст вам разделенный новой строкой список всех атрибутов с именем id,

Другие вопросы по тегам