首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xPath -当节点缺席时返回默认值?

xPath -当节点缺席时返回默认值?
EN

Stack Overflow用户
提问于 2016-09-13 19:03:17
回答 2查看 969关注 0票数 1

我看到了多个堆叠溢出的帖子来寻找答案,但却找不到。尝试了这么多的可能性,但似乎没有什么效果。

我想找到gsRating的学校下面,但很多它的可选标签。因此,希望在缺席时将-1作为默认值返回。

以下是XML:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<schools>
   <school>
      <gsId>87</gsId>
      <name>James Leitch Elementary School</name>
      <type>public</type>
      <gradeRange>K-3</gradeRange>
      <enrollment>1075</enrollment>
      <gsRating>10</gsRating>
      <parentRating>4</parentRating>
      <city>Fremont</city>
      <state>CA</state>
      <districtId>8</districtId>
      <district>Fremont Unified</district>
      <districtNCESId>0614400</districtNCESId>
      <address>47100 Fernald Street, 
Fremont, CA  94539</address>
      <phone>(510) 657-6100</phone>
      <fax>(510) 659-9298</fax>
      <website>http://www.jleitch.edu/</website>
      <ncesId>061440001673</ncesId>
      <lat>37.486492</lat>
      <lon>-121.92332</lon>
      <overviewLink>http://www.greatschools.org/california/fremont/87-James-Leitch-Elementary-School/?s_cid=gsapi</overviewLink>
      <ratingsLink>http://www.greatschools.org/school/rating.page?state=CA&amp;id=87&amp;s_cid=gsapi</ratingsLink>
      <reviewsLink>http://www.greatschools.org/school/parentReviews.page?state=CA&amp;id=87&amp;s_cid=gsapi</reviewsLink>
      <distance>1.12</distance>
      <schoolStatsLink>http://www.greatschools.org/modperl/achievement/CA/87</schoolStatsLink>
   </school>
   <school>
      <gsId>107</gsId>
      <name>Fred E. Weibel Elementary School</name>
      <type>public</type>
      <gradeRange>K-6</gradeRange>
      <enrollment>853</enrollment>
      <parentRating>4</parentRating>
      <city>Fremont</city>
      <state>CA</state>
      <districtId>8</districtId>
      <district>Fremont Unified</district>
      <districtNCESId>0614400</districtNCESId>
      <address>45135 South Grimmer Boulevard, 
Fremont, CA  94539</address>
      <phone>(510) 651-6958</phone>
      <fax>(510) 651-6653</fax>
      <website>http://www.fremont.k12.ca.us/weibel/</website>
      <ncesId>061440009139</ncesId>
      <lat>37.507336</lat>
      <lon>-121.92837</lon>
      <overviewLink>http://www.greatschools.org/california/fremont/107-Fred-E.-Weibel-Elementary-School/?s_cid=gsapi</overviewLink>
      <ratingsLink>http://www.greatschools.org/school/rating.page?state=CA&amp;id=107&amp;s_cid=gsapi</ratingsLink>
      <reviewsLink>http://www.greatschools.org/school/parentReviews.page?state=CA&amp;id=107&amp;s_cid=gsapi</reviewsLink>
      <distance>1.14</distance>
      <schoolStatsLink>http://www.greatschools.org/modperl/achievement/CA/107</schoolStatsLink>
   </school>
</schools>

尝试如下:

代码语言:javascript
复制
//schools/school[*]/(gsRating/string(),'-1')[1]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-17 22:19:30

试作如下: //学校/学校*/(gsRating/string(),'-1')1

使用此XPath 2.0表达式

代码语言:javascript
复制
/*/*/(string(gsRating)[.], -1)[1]

如果要丢弃字符串值为空格的gsRatings 元素,请使用:

代码语言:javascript
复制
/*/*/(normalize-space(gsRating)[.], -1)[1]

如果要丢弃任何字符串值不能转换为数字gsRatings 的,请使用:

代码语言:javascript
复制
/*/*/(normalize-space(gsRating)[number(.) eq number(.)], -1)[1]

这里是一个基于XSLT的验证。

为了简单起见,让我们使用以下XML文档:

代码语言:javascript
复制
<schools>
    <school>
        <gsRating>10</gsRating>
    </school>
    <school>
        <noRating>10</noRating>
    </school>
    <school>
        <gsRating> t </gsRating> 
    </school>
    <school>
        <gsRating/>
    </school>
    <school>
        <gsRating>  </gsRating>
    </school>
</schools>

时,此XSLT转换

代码语言:javascript
复制
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

  <xsl:template match="/*">
    <xsl:value-of select=
          "/*/*/(normalize-space(gsRating)[number(.) eq number(.)], -1)[1]"/>
  </xsl:template>
</xsl:stylesheet>

应用于上面的XML文档,计算XPath表达式并输出它产生的结果(整数序列):

代码语言:javascript
复制
10 -1 -1 -1 -1
票数 1
EN

Stack Overflow用户

发布于 2016-09-13 20:11:44

这个XPath 2.0表达式,

代码语言:javascript
复制
for $s in //school 
   return concat($s/name, ', ', if ($s/gsRating) then $s/gsRating else '-1')

会回来

代码语言:javascript
复制
James Leitch Elementary School, 10
Fred E. Weibel Elementary School, -1

对于您的示例XML。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39477243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档