无法从下面提到的xml中检索aggregationValue

时间:2015-02-25 16:38:18

标签: xml xslt xpath

<ContentItem xmlns="http://endeca.com/schema/content/2008" type="GenericMarketingContent">
      <TemplateId>OneRecordBanner</TemplateId>
      <Name>One Record Banner</Name>
      <Property name="title">
        <String>Recommended</String>
      </Property>
      <Property name="image">
        <String>green.gif</String>
      </Property>
      <Property name="alt_text">
        <String>Image Alt text</String>
      </Property>
      <Property name="record_list">
        <RecordSelection xmlns="http://endeca.com/schema/content/xtags/2010">
          <RecordList>
            <Record key="pp500231036301401000091" aggregationKey="grp_id">
              <aggregationValue>pp5002310363</aggregationValue>
              <label>Deer Stags Manager Mens Slip On Shoes</label>
            </Record>
          </RecordList>
          <recordLimit>1</recordLimit>
        </RecordSelection>
      </Property>
</ContentItem>

/ContentItem/Property[@name='record_list']/RecordSelection/RecordList/Record/aggregationValue/text()
没有获取值。我能够获得其他属性标签的所有其他值,但不能获得这个。有人告诉我哪里出错了吗?

2 个答案:

答案 0 :(得分:1)

元素RecordSelection及其后代与XML文档的其余部分位于不同的名称空间中。

如果您使用的是xslt 2.0,则可以使用此xpath:

/ContentItem/Property[@name='record_list']/*:RecordSelection/*:RecordList/*:Record/*:aggregationValue

一个(可能更干净的)解决方案是使用前缀声明命名空间,以便您可以使用此xpath:

/w1:ContentItem/w1:Property[@name='record_list']/w2:RecordSelection/w2:RecordList/w2:Record/w2:aggregationValue

w1http://endeca.com/schema/content/2008的前缀,w2http://endeca.com/schema/content/xtags/2010

(请注意,您不需要最终/text()

答案 1 :(得分:1)

RecordSelection及其子节点位于不同的名称空间中,并且您没有考虑到它。

修复此问题的丑陋黑客版本将涉及一堆本地名称调用。优雅的版本是在XSLT中定义命名空间。