我有一个xml文件,如下面的
<mxCell id="0"/>
<mxCell id="1" parent="0"/><mxCell connectable="0" id="2" parent="1"value="a=5" vertex="1"></mxCell>
<mxCell id="3" parent="2" value="op1" vertex="1"></mxCell>
<mxCell connectable="0" id="4" parent="1" value="b=8" vertex="1"></mxCell>
<mxCell id="5" parent="4" value="ip1" vertex="1"></mxCell>
<mxCell id="6" parent="4" value="op1" vertex="1"></mxCell>
<mxCell connectable="0" id="7" parent="1" value="c=_x+_y" vertex="1"></mxCell>
<mxCell id="8" parent="7" value="ip1" vertex="1"></mxCell>
从xml文件我想获得&#34; id&#34;的属性值其中属性值为&#34;父=&#34; 4&#34; &#34 ;.虽然我知道只是检索属性值,但我想通过另一个属性的属性值检索属性值。我怎样才能在JAVA中使用xml解析器?
答案 0 :(得分:1)
我已经完成了以下
Element eElement=(Element)nNode;
if(eElement.getAttribute("parent").equals("4")
{
System.out.println("id"=+eElement.getAttribute("id"));
}
答案 1 :(得分:0)
你有几种选择。
一种方法是将XML转换为DOM(文档对象模型),并在其上使用XPath表达式来获取所需的值。 JDOM可能非常适合。请参阅此问题及其答案的示例:Select a node using xpath and jdom
您需要的XPath表达式为//mxCell[@parent='4']/@id
。请注意,如果在XML文档中定义了默认命名空间(您提供了一个提取,而不是整个文档,所以我无法分辨),您需要将其绑定到前缀并在XPath表达式中使用它。
另一个不需要任何外部依赖性的选项是使用XSLT。查看包javax.xml.transform
以获取更多信息。此处提供了仅输出所需值的样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="node()|@*">
<xsl:apply-templates select="node()|@*" />
</xsl:template>
<xsl:template match="//mxCell[@parent='4'][1]">
<xsl:value-of select="@id" />
</xsl:template>
</xsl:stylesheet>
请注意,这只会输出第一个mxCell
元素的id属性,其父元素值为4.这就是[1]
在该XPath表达式末尾的作用。
如果要搜索的值是动态的(而不是总是4),我建议使用XSLT参数将其传递给变换器。
为了解析XSLT的输出并处理多个值,我将其留给您。从这里开始应该很简单。请注意,XSLT方法可能是最高性能的。 JDOM是一个很好的库,但对于大型文档来说,开销非常大,因此内存使用可能会成为一个问题。