XPath 2表达式互相干扰

时间:2019-08-16 08:05:59

标签: logic set-theory

我有这样的XML:

  <Values>
    <Value AttributeID="asset.extension">pdf</Value>
    <Value AttributeID="asset.size">10326</Value>
    <Value AttributeID="ATTR_AssetPush_Webshop">1</Value>
    <Value AttributeID="asset.format">PDF (Portable Document Format application)</Value>
    <Value AttributeID="asset.mime-type">application/pdf</Value>
    <Value AttributeID="asset.filename">filename.pdf</Value>
    <Value AttributeID="asset.uploaded">2018-01-10 17:05:39</Value>
    <Value AttributeID="ATTR_Verwendungsort" Derived="true">WebShop,</Value>
  </Values>

我有2个(或更多)这样的XPath表达式:

<xsl:template match="/STEP-ProductInformation/Assets/Asset/Values/Value[not(@AttributeID='asset.mime-type')]" />
<xsl:template match="/STEP-ProductInformation/Assets/Asset/Values/Value[not(@AttributeID='asset.size')]" />

但是由于某种原因,如果我将它们中的2个一起使用,则会删除所有信息。如果仅使用1个expressoin,则会得到所需的输出。我不能使用两个这样的表达式吗?

我也尝试过将它们像这样组合:

<xsl:template match="/STEP-ProductInformation/Assets/Asset/Values/Value[not(@AttributeID='asset.mime-type') and (@AttributeID='asset.size')]" />

但这也没有做到。

所需的输出如下:

  <Values>
    <Value AttributeID="asset.size">10326</Value>
    <Value AttributeID="asset.mime-type">application/pdf</Value>
  </Values>

2 个答案:

答案 0 :(得分:1)

我认为您可以在XSLT 2/3中将其表示为

<xsl:template match="Values/Value[not(@AttributeID = ('asset.mime-type', 'asset.size'))]"/>

在XSLT / XPath 1.0中,您需要Values/Value[not(@AttributeID = 'asset.mime-type' or @AttributeID = 'asset.size')]

答案 1 :(得分:0)

<xsl:template match="/STEP-ProductInformation/Assets/Asset/Values
                                               /Value[not(@AttributeID='asset.mime-type')]" />
<xsl:template match="/STEP-ProductInformation/Assets/Asset/Values
                                               /Value[not(@AttributeID='asset.size')]" />

这是一个逻辑错误-与XPath无关

这就像在说

  1. 从一周的所有天开始,我只在星期一工作
  2. 从上面选择的日期开始,我将仅在星期二工作

上面的第一条语句仅选择星期一。第二条语句从这些星期一中选择所有星期二,即空集。

正确的陈述

从一周的所有天开始,我只会在星期一或星期二

工作