2

私は次のXMLコードを持っています:

<!-- language: xml -->
<Stats>
  <Stat>
    <Data Name="Value">63.76</Data>
    <Data Name="Entity">first</Data>
  </Stat>
  <Stat>
    <Data Name="Value">51.23</Data>
    <Data Name="Entity">second</Data>
  </Stat>
  <Stat>
    <Data Name="Value">46.1</Data>
    <Data Name="Entity">third</Data>
  </Stat>
  <Stat>
    <Data Name="Value">61.21</Data>
    <Data Name="Entity">first</Data>
  </Stat>
</Stats>

'Data [@ Name='Entity']の場所のみをフィルタリングしたい。xpathの使用:/Stats/Stat/Data[@Name="Entity"]戻り値:最初の2番目の3番目の最初の

しかし、私は結果がユニークであることを望んでいます。だから私は得るだけです:最初の2番目の3分の1

編集:xpathバージョン1.0で動作するにはこれが必要です。

4

2 に答える 2

4

次の XPath 1.0 式を使用します

/Stats/Stat
   [Data/@Name='Entity'
  and
   not(Data[@Name='Entity']  = following-sibling::Stat/Data[@Name = 'Entity'])
   ]
    /Data[@Name='Entity']

XSLT ベースの検証:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
     <xsl:copy-of select=
      "/Stats/Stat
           [Data/@Name='Entity'
          and
           not(Data[@Name='Entity']  = following-sibling::Stat/Data[@Name = 'Entity'])
           ]
            /Data[@Name='Entity']
      "/>
 </xsl:template>
</xsl:stylesheet>

この変換が次の XML ドキュメントに適用された場合(整形式でない提供されたテキストを修正することによって生成されます):

<Stats>
  <Stat>
    <Data Name="Value">63.76</Data>
    <Data Name="Entity">first</Data>
  </Stat>
  <Stat>
    <Data Name="Value">51.23</Data>
    <Data Name="Entity">second</Data>
  </Stat>
  <Stat>
    <Data Name="Value">46.1</Data>
    <Data Name="Entity">third</Data>
  </Stat>
  <Stat>
    <Data Name="Value">61.21</Data>
    <Data Name="Entity">first</Data>
  </Stat>
</Stats>

上記の XPath 式が評価され、選択されたノードが出力にコピーされます。

<Data Name="Entity">second</Data>
<Data Name="Entity">third</Data>
<Data Name="Entity">first</Data>

: テキスト ノード (「first」、「second」、および「third」) だけが必要な場合は、次の 1 つの XPath 式を使用します。

/Stats/Stat
   [Data/@Name='Entity'
  and
   not(Data[@Name='Entity']  = following-sibling::Stat/Data[@Name = 'Entity'])
   ]
    /Data[@Name='Entity']
      /text()
于 2012-05-10T12:02:34.143 に答える
3

XPathのバージョンを指定する必要があります。XPath 2.0では、それは些細なことです。

distinct-values(/Stats/Stat/Data/@Name)
于 2012-05-10T11:21:31.313 に答える