1

同じ xml を処理する必要があります。以下はその一部です。

<response>
<dat id="1">
    <b>
        <i>1</i>
    </b>
    <ds>
        <d>
            <t>2012-12-21</t>

属性 id="1" を持つ親子要素 "dat" と 2012-12-21 の値を持つ子要素 "t" を持つ要素 "d" を選択するには、どの xpath を使用する必要がありますか?

これは C# であり、アプリケーションはこの xml をインターネットから取得し、XmlDocument に読み込みます。現在、私は複数のステップを実行しています。ノート「dat」を見つけてから、「dat」の下にある「t」を見つけて、親ノード「d」に移動します。上記の複数の手順を置き換えるために xpath を使用したいと考えています。

私はこの xpath: を試しまし//dat[@id="1"]/ds/d[t="2012-12-21"]たが、nullノードを返します

ありがとう。

編集: Dimitre Novatchev のソリューションについては、以下を参照してください。

ところで://dat[@id="1"]/ds/d[t="2012-12-21"]テストを行ったときに何が起こったのかわかりません。

4

1 に答える 1

1

使用

//dat[@id = 1]/*/d[t[. = '2012-12-21']]

これにより、子を持つすべてのd要素が選択されますt。その文字列値は文字列です'2012-12-21'

そして、その祖父母は、数値が。datの属性を持つaです。id1

そのようなすべての要素から1つだけ(たとえば最初の要素)を選択する場合は、次を使用します

(//dat[@id = 1]/*/d[t[. = '2012-12-21']])[1]

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="//dat[@id = 1]/*/d[t[. = '2012-12-21']]"/>
 </xsl:template>
</xsl:stylesheet>

この変換が(完成した)提供されたXMLドキュメントに適用される場合:

<response>
    <dat id="1">
        <b>
            <i>1</i>
        </b>
        <ds>
            <d>
                <t>2012-12-21</t>
            </d>
        </ds>
    </dat>
</response>

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

<d>
   <t>2012-12-21</t>
</d>
于 2013-02-13T04:54:12.273 に答える