使用以下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']"/>
答案 0 :(得分:0)
在XPath 1.0中,如果给定条件expr1
为$cond
,则可以使用true()
进行选择;如果使用此单个XPath表达式,则可以使用expr2
:
(expr1)[$cond] | (expr2)[not($cond)]
这适用于您的情况。唯一的困难是您没有提供格式良好的XML文档,也没有指定确切的条件以及在$cond
或not($cond)
<时必须选择的确切(集合)节点/ p>