2013-04-04 35 views
0

用下面的XML我需要的,如果它存在,選擇家庭住址和工作地址來選擇祖父母價值的同胞。因此,我試圖找到語法選擇WD的值:Address_Line_Data [@wd:描述= 「地址行」]從WD的起點:Address_Line_Data/WD:使用/ WD:type_data項/ WD:Type_Reference/@ WD:描述=「家」需要,如果它不與XSLT特定屬性

這裏是XML:

    <wd:Contact_Data> 
        <wd:Address_Data> 
         <wd:Address_Line_Data wd:Descriptor="Address Line 1"> 
         <wd:Usage_Data> 
          <wd:Type_Data> 
          <wd:Type_Reference wd:Descriptor="Work"> 
          </wd:Type_Reference> 
          </wd:Type_Data> 
         </wd:Usage_Data> 
        </wd:Address_Data> 
        <wd:Address_Data> 
         <wd:Usage_Data> 
          <wd:Type_Data> 
          <wd:Type_Reference wd:Descriptor="Home"> 
          </wd:Type_Reference> 
          </wd:Type_Data> 
         </wd:Usage_Data> 
        </wd:Address_Data> 
       </wd:Contact_Data> 

我很新的XSTL,我曾嘗試以下三個表達式,它們都什麼都不做。我正在使用xml 1.0。有什麼建議麼?提前致謝!

<xsl:value-of select="wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Address_Data/wd:Usage_Data/wd:Type_Data/wd:Type_Reference[@wd:Descriptor='Home']/ancestor::wd:Address_Data/wd:Address_Line_Data[@wd:Descriptor='Address_Line_1']"/>  

<xsl:value-of select="wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Address_Data/wd:Usage_Data/wd:Type_Data/wd:Type_Reference[@wd:Descriptor='Home'][ancestor::wd:Address_Data[wd:Address_Line_Data[@wd:Descriptor='Address_Line_1']]]"/>   

<xsl:value-of select="wd:Worker_Data/wd:Personal_Data/wd:Contact_Data/wd:Address_Data/wd:Usage_Data/wd:Type_Data/wd:Type_Reference[@wd:Descriptor='Home']/ancestor::wd:Usage_Data/preceding-sibling::wd:Address_Line_Data[@wd:Descriptor='Address_Line_1']"/> 
+0

時必須選擇的節點的確切(集合)提供的文本類似於XML實際上並不是一個格式良好的XML文檔 - 存在結構性的畸形。請編輯問題並更正。 – 2013-04-06 03:22:41

回答

0

在XPath 1.0人們可以選擇使用expr1如果給定的條件$condtrue()expr2否則使用此單一的XPath表達式

(expr1)[$cond] | (expr2)[not($cond)] 

這可以應用到你的情況。唯一的困難是您沒有提供格式良好的XML文檔,您也沒有指定確切的條件和必須在$condnot($cond)