2013-03-11 181 views
0

如何從addressinformation(在這種情況下爲)獲取UUID,其中地址名稱是帶有Java XPath的「BILL_TO」(如果有)?如何從XPath中的子節點值節點獲取父文本值?

這裏是我的XML:

<Company> 
     <Name>My Company</Name> 
     <LastName>Smith</LastName> 
     <FirstName>Jim</FirstName> 
     <street>123 Main Street</street> 
     <AddressInformation> 
       <UUID>543233<UUID> 
      <Address> 
       <UUID>223223</UUID> 
       <AddressID> 
        <AddressName>Default</AddressName> 
       </AddressID> 
      </Address> 
     </AddressInformation> 
     <AddressInformation> 
       <UUID>999123<UUID> 
      <Address> 
       <UUID>443211</UUID> 
       <AddressID> 
        <AddressName>BILL_TO</AddressName> 
       </AddressID> 
      </Address> 
     </AddressInformation> 
     <city>Mytown</city> 
     <state>NY</state> 
     <zip>11234</zip> 
</Company> 

回答

3

好第一關你的XML並沒有很好地形成,所以我這個固定爲您

<Company> 
    <Name>My Company</Name> 
    <LastName>Smith</LastName> 
    <FirstName>Jim</FirstName> 
    <street>123 Main Street</street> 
    <AddressInformation> 
      <UUID>543233</UUID> 
     <Address> 
      <UUID>223223</UUID> 
      <AddressID> 
       <AddressName>Default</AddressName> 
      </AddressID> 
     </Address> 
    </AddressInformation> 
    <AddressInformation> 
      <UUID>999123</UUID> 
     <Address> 
      <UUID>443211</UUID> 
      <AddressID> 
       <AddressName>BILL_TO</AddressName> 
      </AddressID> 
     </Address> 
    </AddressInformation> 
    <city>Mytown</city> 
    <state>NY</state> 
    <zip>11234</zip> 
</Company> 

那麼這是應該做的伎倆中的XPath爲你:

//Company/AddressInformation[Address/AddressID/AddressName='BILL_TO']/UUID 
+0

並獲得UUID元素的文本:// Company/AddressInformation [Address/AddressID/AddressName ='BILL_TO']/UUID/te xt() – dnault 2013-03-11 21:42:15

+0

我已經使用了11年的XML,並且如果您認爲您將使用XML/XSL很多,那麼我不能推薦XMLSPY,那麼XMLSPY就是王道! – DeadlyDan 2013-03-11 21:57:41

+1

@dnault否,如果您想要'UUID'元素的字符串值,那麼您只需評估答案中的原始xpath _as a string_ - 對於javax.xpath,這意味着XPathFactory.newInstance()。newXPath()。評估(表達式,domDocument,XPathConstants.STRING)'。 'text()'位置步驟將爲您提供給定節點的所有單個文本節點子節點的集合,這很少是您真正想要的(例如,將這樣的集合傳遞給期望字符串的函數將僅在集合中的_first_節點,而不是元素的整個文本值)。 – 2013-03-13 08:53:56