2

javaを使用して、最新の最大エントリ番号を見つけようとしています。このエントリは特定のタイプを指定する必要があります。そこから値を引き出す必要があります。

xmlは次のようになります

<XmlFile>
   <data_item>
        <data_report>
            <type>My_Type</type>
            <entry_number>12</entry_number>                
            <value>1234</value>
        </data_report>
        <data_report>
            <type>My_Type</type>
            <entry_number>9</entry_number>                
            <value>11234</value>
        </data_report>
   </data_item>
   <data_item>
      <data_report>
             <type>My_Type</type>
            <entry_number>17</entry_number>                
            <value>112354</value>
      </data_report>
      <data_report>
             <type>Not_My_Type</type>
            <entry_number>122</entry_number>                
            <value>11234</value>
      </data_report>
   </data_item>
</XmlFile>

したがって、要点は、「My_Type」である必要があるデータであり、任意のdata_itemに含めることができますが、my_typeのすべてのアイテムから最大間隔を見つける必要があり、値のみをプルします。

Xpathを使用してこれを実行しようとしましたが、完全に機能させることができませんでした。この場合、3番目のデータレポート(2番目のデータ項目)は、「マイタイプ」でありながらエントリ番号が最も高いため、後のレポートになります。したがって、プログラムに番号112354を取得してもらいたいと思います。

Xpathを使用してこれを行う方法はありますか?これを機能させようとしているファイルはこれよりもはるかに大きいですが、Xpathが最も簡単なオプションのようです。DOMやSAXの方が適している場合は、これらに反対しません。

ありがとう!

4

3 に答える 3

1

このXpath式を試してください。

max(//data_item/data_report[type = 'My_Type' and entry_number = max(//data_item/data_report[type = 'My_Type']/entry_number)]/value)
于 2012-10-25T03:30:36.367 に答える
1

このmax()関数はXPath1.0では使用できません。

必要な(必要な最大プロパティを持つノードが複数ある場合は最初の)値を生成する純粋なXPath式は次のとおりです。

   string(
      /*/*/*[type='My_Type'
           and
             not(/*/*/*[type='My_Type']/entry_number > entry_number)
            ][1]/value
          )

XSLTベースの検証

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
     <xsl:copy-of select=
     "string(
      /*/*/*[type='My_Type'
           and
             not(/*/*/*[type='My_Type']/entry_number > entry_number)][1]/value
          )"/>
 </xsl:template>
</xsl:stylesheet>

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

<XmlFile>
    <data_item>
        <data_report>
            <type>My_Type</type>
            <entry_number>12</entry_number>
            <value>1234</value>
        </data_report>
        <data_report>
            <type>My_Type</type>
            <entry_number>9</entry_number>
            <value>11234</value>
        </data_report>
    </data_item>
    <data_item>
        <data_report>
            <type>My_Type</type>
            <entry_number>17</entry_number>
            <value>112354</value>
        </data_report>
        <data_report>
            <type>Not_My_Type</type>
            <entry_number>122</entry_number>
            <value>11234</value>
        </data_report>
    </data_item>
</XmlFile>

XPath式が評価され、この評価の結果が出力にコピーされます

112354
于 2012-10-25T13:22:05.053 に答える
0

私はこれを自動化する方法を知りません。-xmlを
解析してDataReportオブジェクトのリストを作成します(DOMは問題なく機能します)
-DataReportオブジェクト間にコンパレータを作成します
-そのコンパレータに従ってリストを並べ替えます

于 2012-10-25T03:27:58.830 に答える