2016-04-12 14 views
0

私は以下のようなXML文書を持っています。名前空間をスキップするXSLT

<user:doc> 
    <user:md> 
     <user:md.number>user 1</user:md.number> 
     <user:md.name>David</user:md.name> 
     <user:md.address>AL</user:md.address> 
    </user:md> 
</user:doc> 

このユーザー名を取得するには、XSLTを記述する必要があります。私は以下のような方法を知っています。

<xsl:template match="user:doc"> 
<xsl:apply-templates/> 
</xsl:template> 

<xsl:template match = "user:md"> 
<xsl:value-of select = "./user:md.name"/> 
</xsl:template> 

しかし、私は、名前空間をスキップして直接また<xsl:template match="user:doc">を使用すると、私に以下のエラーが発生しますxsl:template match="doc">....</xsl:template>

のように一致させることができるかどうかを知りたいです。

File C:\Users\u0138039\Desktop\XML\XSLT\chapters.xsl is not valid. 
    Undefined namespace prefix 'user' 
     Error location: xsl:stylesheet/xsl:template/@match 
     Details 
      XPST0081: A namespace prefix used in an expression must be expandable into a namespace URI using the statically known namespaces 

おかげ

答えて

0
<xsl:template match="*:doc"> 
+0

次に、 ''を直接入力することはできますか? – Rakesh

+0

いいえ........... –

0

あなたはxsl:stylesheetの属性として

xpath-default-namespace="http://foo.bar.com/ns" 

を定義することができます。これを行うと、match="md"は、ローカル名がmd、名前空間URIがhttp://foo.bar.com/nsの一致する要素として解釈されます。

+0

こんにちは、 'user.md.name'の値をどうやって得ることができますか? – Rakesh

+0

あなたの例はuser.md.nameではなく、user:md.nameを持っています。 xpath-default-namespaceを使用すると、その名前空間内のすべての要素名は固定されないので、 'select =" md.name "'と書くだけです。 –