2

これは私のXMLです

<root>
   <entry id="1">
      <value name="ID">11</value>
      <value name="ENABLE">0</value>
      <value name="NAME">USER1</value>
   </entry>
   <entry id="2">
      <value name="ID">11</value>
      <value name="ENABLE">0</value>
      <value name="NAME">USER2</value>
   </entry>
   <entry id="3">
      <value name="ID">12</value>
      <value name="ENABLE">0</value>
      <value name="NAME">USER1</value>
   </entry>
</root>

11idであるすべての名前を取得するには、XPath クエリが必要です。

私は試した:

String xpath = "/root/entry/value[@name=ID/text()='11']/value[@name='NAME']";
String xpath = "/root/entry/value[@name=ID/text()='11']/NAME";

誰かが私のクエリで何が間違っているか教えてもらえますか?

編集:

期待される出力:

USER1
USER2

これらは両方とも ID = 11 です

4

5 に答える 5

3

これは正しいパスになります。

/root/entry[value[@name = 'ID'] = 11]/value[@name = 'NAME']

ノードのリストを取得するには、returnTypeパラメーターを受け取るバージョンのxPath.evaluate()を使用する必要があります。

InputSource document = new InputSource(new FileInputStream("user1.xml"));
String xpath = "/root/entry[value[@name = 'ID'] = 11]/value[@name = 'NAME']";
NodeSet result = (NodeSet)xPath.evaluate(xpath, document, XPathConstants.NODESET); 
for(int index = 0; index < result.getLength(); index ++) {      
    Node node = result.item(index);
    String name = node.getNodeValue();
}
于 2013-01-25T02:41:09.237 に答える
3
/root/entry[value[@name="ID" and .=11]]/value[@name="NAME"]

また

/root/entry/value[@name="ID" and .=11]/../value[@name="NAME"]

また

/descendant::entry[value=11 and value/@name="ID"]/value[@name="NAME"]

また

//value[.=11]/@name[.="ID"]/ancestor::entry/value[@name="NAME"]

または他の多くのバリエーション

于 2013-01-25T02:07:20.297 に答える
1

使用:

/*/*[*[@name='ID'] = 11]/*[@name='NAME']

XSLT ベースの検証:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select="/*/*[*[@name='ID'] = 11]/*[@name='NAME']"/>
 </xsl:template>
</xsl:stylesheet>

この変換が提供された XML ドキュメントに適用される場合:

<root>
    <entry id="1">
        <value name="ID">11</value>
        <value name="ENABLE">0</value>
        <value name="NAME">USER1</value>
    </entry>
    <entry id="2">
        <value name="ID">11</value>
        <value name="ENABLE">0</value>
        <value name="NAME">USER2</value>
    </entry>
    <entry id="3">
        <value name="ID">12</value>
        <value name="ENABLE">0</value>
        <value name="NAME">USER1</value>
    </entry>
</root>

XPath 式が評価され、この評価の結果 (選択されたすべてのノード) が出力にコピーされます

<value name="NAME">USER1</value>
<value name="NAME">USER2</value>
于 2013-01-25T04:36:49.847 に答える
0

使用する:

//entry[value[@name = 'ID'] = 11]/value[@name = 'NAME']
于 2013-01-25T05:30:32.467 に答える
0

これを試して、

String xpath = "/root/entry[value[@name='ID' and text()='11']]/value[@name="NAME"]";

于 2013-01-25T01:54:13.177 に答える