需要在XSLT中选择具有特定属性的祖父母的兄弟姐妹的值

时间:2013-04-04 07:41:08

标签: xml xslt-1.0

使用以下XML我需要选择家庭地址(如果存在)和工作地址(如果不存在)。所以我试图从wd:Address_Line_Data / wd的起点找到选择wd:Address_Line_Data [@wd:Descriptor =“Address_Line_1”]的值的语法:Usage / wd:Type_Data / wd:Type_Reference / @ wd:描述符= “主页”

这是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']"/>

1 个答案:

答案 0 :(得分:0)

在XPath 1.0中,如果给定条件expr1$cond,则可以使用true()进行选择;如果使用此单个XPath表达式,则可以使用expr2

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

这适用于您的情况。唯一的困难是您没有提供格式良好的XML文档,也没有指定确切的条件以及在$condnot($cond) <时必须选择的确切(集合)节点/ p>