Экспорт определенного значения атрибута всех узлов 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>
</xsl:text>
</xsl:text>
который даст вам разделенный новой строкой список всех атрибутов с именем id
,