Xpath将项目中的字段添加到具有引用ID的另一个项目

时间:2013-01-10 11:13:54

标签: xpath

这是我需要导入的文件的结构。

<channel>
<item>
  <type>image</type>
  <title>title image</title>
  <id>1</id>
  <image_url>url_to_image</image_url>
</item>

<item>
  <type>page</type>
  <title>node title</title>
  <id>2</id>
  <ref>
    <entity>image_ref</entity>
    <ref_value>1</ref_value>
  </ref>
  <ref>
    <entity>category</entity>
    <ref_value>5</ref_value>
  </ref>
  </item>
</channel>

在页面项中,标签包含图像项的ID。 如何将图像项中的图像URL添加到页面项? 我正在尝试使用

/channel/item[id=ref/ref_value[../entity/text() = 'image_ref']]/image_url但它不起作用......

什么是XPath表达式不导入图像项而只是导入页面项?

提前致谢

1 个答案:

答案 0 :(得分:1)

使用

  /*/item[type='image' and id=../item[type='page']
           /ref[entity = 'image_ref']/ref_value]
                     /image_url/text()

基于XSLT的验证

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
     <xsl:copy-of select=
     "/*/item[type='image' and id=../item[type='page']
               /ref[entity = 'image_ref']/ref_value]
                         /image_url/text()"/>
 </xsl:template>
</xsl:stylesheet>

将此转换应用于提供的XML文档

<channel>
    <item>
        <type>image</type>
        <title>title image</title>
        <id>1</id>
        <image_url>url_to_image</image_url>
    </item>
    <item>
        <type>page</type>
        <title>node title</title>
        <id>2</id>
        <ref>
            <entity>image_ref</entity>
            <ref_value>1</ref_value>
        </ref>
        <ref>
            <entity>category</entity>
            <ref_value>5</ref_value>
        </ref>
    </item>
</channel>

评估XPath表达式并将此评估结果复制到输出中:

url_to_image

<强>更新

OP在评论中暗示,可能有很多&#34;页面项目&#34;和&#34;图像项目&#34;并且他需要一个表达式,只获取特定页面的图像URL。

此XPath表达式

 /*/item[type='image'
        and id=../item[type='page'][1]
                             /ref[entity = 'image_ref']/ref_value
               ]
                /image_url/text()"/>

为第一个&#34;页面项目生成想要的图片网址&#34;在以下XML文档中:

<channel>
    <item>
        <type>image</type>
        <title>title image</title>
        <id>1</id>
        <image_url>url_to_image</image_url>
    </item>
    <item>
        <type>image</type>
        <title>title image</title>
        <id>2</id>
        <image_url>url2_to_image</image_url>
    </item>
    <item>
        <type>page</type>
        <title>node title</title>
        <id>3</id>
        <ref>
            <entity>image_ref</entity>
            <ref_value>1</ref_value>
        </ref>
        <ref>
            <entity>category</entity>
            <ref_value>5</ref_value>
        </ref>
    </item>
    <item>
        <type>page</type>
        <title>node title</title>
        <id>4</id>
        <ref>
            <entity>image_ref</entity>
            <ref_value>2</ref_value>
        </ref>
        <ref>
            <entity>category</entity>
            <ref_value>5</ref_value>
        </ref>
    </item>
</channel>

产生的结果是

url_to_image

要获取第二个页面项目的所需网址,我们只需将上述XPath表达式修改为:

 /*/item[type='image'
        and id=../item[type='page'][2]
                             /ref[entity = 'image_ref']/ref_value
               ]
                /image_url/text()"/>

现在结果是

url2_to_image