2016-09-20 81 views
0

我是XPathExpression上工作很新,我想建立一個表達式來檢索屬性值到我的自定義Java對象,即消息。下面是虛擬XML,其中將有許多消息節點。XPathExpression來選擇子屬性值忽略名稱空間

我的Java代碼應讀取此XML,並相應地爲消息創建一個Java對象列表。

這是基於我試圖建立一個XpathExpression的條件。

  1. 在此XPath jobReport /記錄/記錄/消息檢查,如果冠軍具有價值TestCompany。如果有其他公司的消息應該跳過

我正在使用下面的Xpath表達式,但由於名稱空間數據而無法返回數據。現在我需要使用表達式跳過這些名稱空間,並獲得標題的值。

  1. jobReport /記錄/記錄/消息/ * [本地名稱()= 'AA:標題']
  2. jobReport /記錄/記錄/消息/ * [本地名稱()= 'AA:標題'/文本()= 'TestCompany']
  3. // * [本地名稱()= 'AA:標題'/文本()= 'TestCompany']

j

<?xml version="1.0" encoding="UTF-8"?> 
<jobReport> 
    <jobID>123515412512221</jobID> 
    <rundate>2016-09-16</rundate> 
    <startTime>13:09:49</startTime> 
    <endTime>13:10:39</endTime> 
    <containsErrors>false</containsErrors> 
    <records> 
     <record> 
      <recordid>20160920001</recordid> 
      <primaryfilename>hello.pdf</primaryfilename> 
      <result> 
       <status>OK</status> 
       <errorcode /> 
      </result> 
      <messages> 
       <aa:title xmlns="http://www.somedomain.com/example/test/xml/" 
        xmlns:aa="DummyProject/2016-04">TestCompany</aa:title> 
       <aa:messageid xmlns="http://www.somedomain.com/example/test/xml/" 
        xmlns:aa="OP360CustomerArchive/2016-04">30.02.02.15.01</aa:messageid> 
       <aa:messagefrom xmlns="http://www.somedomain.com/example/test/xml/" 
        xmlns:aa="OP360CustomerArchive/2016-04">FI</aa:messagefrom> 
       <aa:messageto 
        xmlns="http://www.op.fi/hallintapalvelut/dokumenttirajapinta/xml/" 
        xmlns:aa="OP360CustomerArchive/2016-04">keijo</aa:messageto> 
       <aa:mailid 
        xmlns="http://www.op.fi/hallintapalvelut/dokumenttirajapinta/xml/" 
        xmlns:aa="OP360CustomerArchive/2016-04">agreement</aa:mailid> 
       <aa:phonenumber 
        xmlns="http://www.op.fi/hallintapalvelut/dokumenttirajapinta/xml/" 
        xmlns:aa="OP360CustomerArchive/2016-04">xml-tuote</aa:phonenumber> 
      </messages> 
     </record> 
    </records> 
</jobReport> 

回答

1

元素的local-name()不包含名稱空間前綴。

因此,而不是*[local-name()='aa:title'],使用*[local-name()='title']

+0

謝謝。但是這並不能給我我想要的東西。我嘗試使用下面的表達式,但只給我的命名空間,而不是值,即** TestCompany ** ** jobReport/records/record/messages/* [local-name()='alertmethod'] ** –

+0

哎呀,這是一個錯字,更正表達式 **/jobReport/records/record/messages/* [local-name()='title'] ** –

+0

**仔細檢查:**'''/ jobReport /記錄/記錄/消息/ * [本地名稱()='標題']'[***確實選擇'aa:title'如下所示***](http://www.xpathtester.com/xpath/ 3b8b3385d6efdc4ec48cc0bdac83468e)。 – kjhughes

相關問題