我有一个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
?
答案 0 :(得分:1)
我想获得所有拥有它的节点的id属性的所有值的列表。
使用XPath,您可以使用如下表达式:
<html land="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<script>
function loadXMLDoc(XML65) {
xhttp = new XMLHttpRequest();
xhttp.open("GET", XML65, false);
xhttp.send();
return xhttp.responseXML;
}
</script>
</head>
<body>
<h1>Testing XML FILE</h1>
<script>
var xmlDoc = loadXMLDoc("XML65.xml");
for (i = 0; i < xmlDoc.childNodes.length; i++)
{
thisNode = xmlDoc.childNodes[i];
document.write("The root element has this many direct children: " + i);
}
</script>
</body>
</html>
我觉得很容易。如果你想要一些布局,你可以使用XSLT:
//@id
将为您提供名称为<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>
的所有属性的换行符分隔列表。
答案 1 :(得分:1)
您可以使用xmlstarlet输出列表:
xmlstarlet sel -t -v "//@id" yourfile.xml
但是,这只会输出ID值。
-t选项“创建”类似于Abel的答案中建议的XSLT。但输出只是您使用sel
命令选择的输出。选项-v是用引号打印xpath的值。 xpath表达式中的双斜杠调用所有节点。