質問

XMLスニペット:

<AA>
  <BB>foo</BB>
  <CC>bar</CC>
  <DD>baz</DD>
  <EE>bar</EE>
</AA>

方法を選択すべての子ノードをぶら下げるフィールドの <AA> してい bar てんですか?上記の例ではいを選択したい <CC><EE>.いていこうと思い、ソリューションがようなもの:

<xsl:template match="AA">
  <xsl:for-each select="???" />
</xsl:template>
役に立ちましたか?

解決

一つの最も簡単なソリューションOPの質問は、以下のXPath表現:

*/*[.='bar']

いことに注意してくださいXSLT指導が関与する--これはXPath表現, で質問にこのタグ付きXPath.

これからが使用できるこのXPath表現XSLTなど、様々などに適用テンプレートのすべての選択したノード.

例えば、以下では、XSLT変換、XMLドキュメント生産も、すべての要素が子どもの <AA> 内容は一致いたしません "bar" 削除:

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

    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>

    <xsl:template match="AA">
      <xsl:copy>
         <xsl:apply-templates select="*[. = 'bar']"/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

この変換が適用されますが、元のXML文書:

<AA>
    <BB>foo</BB>
    <CC>bar</CC>
    <DD>baz</DD>
    <EE>bar</EE>
</AA>

した結果がでる:

<AA>
   <CC>bar</CC>
   <EE>bar</EE>
</AA>

い注:

で試合のパターンまたはしないを指定する必要があり、絶対XPath表現が相対的からかもしれないけど、僕のXPath表現が自然に簡単にこの試合のパターン:

*[. = 'bar']
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top