web-dev-qa-db-ja.com

XSLTを使用してXMLドキュメントのルート要素のタグ名を取得する方法

Xmlドキュメントのルート要素のタグ名をxslt変数に割り当てることに興味があります。たとえば、ドキュメントが次のようになっている場合(DTDを差し引いたもの):

<foo xmlns="http://.....">
    <bar>1</bar>
</foo>

そして、文字列 'foo'をxslt変数に割り当てたいと思いました。それを参照する方法はありますか?

ありがとう、マット

24
Matty

一番外側のXML要素の名前を取得したいと思います。これは、次のXSLサンプルのように実行できます。

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:variable name="outermostElementName" select="name(/*)" />

  <xsl:template match="/">
    <xsl:value-of select="$outermostElementName"/>
  </xsl:template>
</xsl:stylesheet>

XPathの用語には若干の違いがあることに注意してください。

ツリーの最上部は、ルートノード(1.0用語)またはドキュメントノード(2.0)です。これが「/」の意味です。これは要素ではありません。最も外側の要素(および最も外側の要素の前後にあるコメントと処理命令)の親です。ルートノードには名前がありません。

http://www.dpawson.co.uk/xsl/sect2/root.html#d9799e301 を参照してください

25
Dirk Vollmar

XPath name() 関数を使用します。

最上位(ルートではない!)要素の名前を取得する1つのXPath式は次のとおりです。

name(/*)

Name()関数はノードの完全修飾名を返すため、要素_<bar:foo/>_の場合、文字列 "bar:foo"が返されます。

名前のローカル部分のみが必要な場合(接頭辞と「:」なし)、XPath local-name() 関数を使用する必要があります。

21

理解した。パラメータ*が指定された関数name()は、fooを返します。

2
Matty

あなたが欲しいlocal-name()

0
annakata