首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何返回同一级别上的子类别的类别?

如何返回同一级别上的子类别的类别?
EN

Stack Overflow用户
提问于 2015-10-21 22:43:38
回答 1查看 64关注 0票数 1

如何使用XPath (最好是1.0)选择具有子类别值的类别列表?

其结构如下:

  • 类别(1)
    • 姓名(1)
    • 数值(1-1)
    • 数值(1-2)

  • 范畴(2)
    • 姓名(2)
    • 数值(2-1)
    • 数值(2-2)
    • 数值(2-3)

  • 等。

因此,理想情况下,我需要返回类别名称及其相关值的列表,例如:

  • name (1):value (1-1),value (1-2)
  • name (2):value (2-1),value (2-2),value (2-3)
  • 等。

或理想情况:

  • name (1) / value (1-1)
  • name (1) / value (1-2)
  • name (2) / value (2-1)
  • name (2) / value (2-2)
  • name (2) / value (2-3) 我希望它是/characteristics/category/[concat(name/uk, "/", value/uk)]-like,但是语法不正确,

或者任何类似的格式,只要我能够区分主类别和子类别,那么我就可以使用适当的后端语言进一步解析这些数据。

基本上,我希望实现类别与其子类别之间的关联,以便将它们存储在分级分类法词汇表中。

我从提要中获得了以下XML:

代码语言:javascript
复制
<characteristics>
  <category id="1">
    <name>
      <uk>Orientation</uk>
      <es>Orientación</es>
    </name>
    <value id="1">
      <uk>North</uk>
      <es>Norte</es>
    </value>
    <value id="2">
      <uk>East</uk>
      <es>Este</es>
    </value>
    <value id="3">
      <uk>South</uk>
      <es>Sur</es>
    </value>
    <value id="4">
      <uk>West</uk>
      <es>Oeste</es>
    </value>
  </category>
  <category id="2">
    <name>
      <uk>Condition</uk>
      <es>Estado</es>
    </name>
    <value id="1">
      <uk>Recently Refurbished</uk>
      <es>Renovado Recientemente</es>
    </value>
  </category>
  <category id="3">
    <name>
      <uk>Pool</uk>
      <es>Piscina</es>
    </name>
    <value id="1">
      <uk>Private</uk>
      <es>Privada</es>
    </value>
  </category>
  <category id="4">
    <name>
      <uk>Climate Control</uk>
      <es>Climatización</es>
    </name>
    <value id="1">
      <uk>Fireplace</uk>
      <es>Chimenea</es>
    </value>
  </category>
  <category id="5">
    <name>
      <uk>Views</uk>
      <es>Vistas</es>
    </name>
    <value id="1">
      <uk>Sea</uk>
      <es>Mar</es>
    </value>
    <value id="2">
      <uk>Mountain</uk>
      <es>Montaña</es>
    </value>
    <value id="3">
      <uk>Panoramic</uk>
      <es>Panorámicas</es>
    </value>
  </category>
  <category id="6">
    <name>
      <uk>Features</uk>
      <es>Caracteristicas</es>
    </name>
    <value id="1">
      <uk>Guest Apartment</uk>
      <es>Aprtmnt. Huéspedes</es>
    </value>
    <value id="2">
      <uk>Guest House</uk>
      <es>Casa de Huéspedes</es>
    </value>
    <value id="3">
      <uk>Barbeque</uk>
      <es>Barbacoa</es>
    </value>
  </category>
</characteristics>

下面是返回第一类值的XPath查询:

代码语言:javascript
复制
/characteristics/category[@id=1]/name/uk | /characteristics/category[@id=1]/value/uk
<uk>Orientation</uk>
<uk>North</uk>
<uk>East</uk>
<uk>South</uk>
<uk>West</uk>

现在,我如何组合、比较或反向引用这两个id,并使每个类别的工作都是动态的?

知道如何生成这样的XPath查询吗?

我也尝试过../..parent::ancestor::[]的不同组合,比如表达式和条件,但都没有成功。我也尝试过使用string-join,但是它在这个演示中不起作用,其次,我试图解析它的代码不支持 XPath 2.0。

或者是最接近/相似的选择/格式,它允许我列出和区分不同类别的名称及其相关值,这样我就可以用不同的语言进一步解析这个结构了吗?

其他尝试:

  • concat(/characteristics/category[@id=@id]/name/uk, "/", /characteristics/category[@id=@id]/value/uk) 只返回第一个元素:Orientation/North (不需要[@id=@id])
  • concat(/characteristics/category/*/*[name()="uk"]/node(), /characteristics/category) 创建一些我不理解的层次结构(它是什么样的格式): 定向定向-东方-北北、东、南、南、西-奥斯特 但只适用于第一个主要类别
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-21 22:51:44

XPath用于选择,而不是操作。您可以选择出现在输入XML文档中的节点;不能任意地重新排列这些节点,特别是使用XPath 1.0。如果要重新排列节点,请使用XSLT或调用XPath库的其他语言。

XPath :即使在您的评论和问题更新之后,您仍然坚持这样一个概念,即 1.0评估的结果可以不仅仅是从输入文档中选择的节点的列表。想要层次结构而不是列表表明您对XPath 1.0期望过高。

最后更新.

XPath 2.0解决方案

给出了您的输入XML,这个XPath 2.0表达式:

代码语言:javascript
复制
for $c in //category 
    return for $v in $c/value 
               return concat($c/name/uk, ' / ', $v/uk)

将产生

代码语言:javascript
复制
Orientation / North
Orientation / East
Orientation / South
Orientation / West
Condition / Recently Refurbished
Pool / Private
Climate Control / Fireplace
Views / Sea
Views / Mountain
Views / Panoramic
Features / Guest Apartment
Features / Guest House
Features / Barbeque

按要求.

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

https://stackoverflow.com/questions/33270509

复制
相关文章

相似问题

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