使用xml中的另一个属性值检索一个属性值

时间:2016-03-31 06:52:19

标签: java xml xml-parsing xml-attribute

我有一个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解析器?

2 个答案:

答案 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是一个很好的库,但对于大型文档来说,开销非常大,因此内存使用可能会成为一个问题。