1

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

<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 表达式是什么?

提前致谢

4

1 回答 1

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在评论中暗示可能有许多“页面项”和“图像项”,并且他需要一个表达式,仅获取特定页面的图像 url。

这个 XPath 表达式

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

为以下 XML 文档中的第一个“页面项”生成所需的图像 url:

<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

要获得第二个页面项的所需 url,我们只需将上面的 XPath 表达式修改为:

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

现在结果是

url2_to_image
于 2013-01-10T12:49:47.517 回答