2013-10-04 121 views
0

我有以下XML:XSLT:獲取XML命名空間屬性

<article article-type="research-article"> 
<body> 
<graphic xlink:href="zee9991370930006.g.eps"/> 
<self-uri xlink:title="pdf" xlink:href="zee00813002857.pdf" /> 
</body> 
</article> 

我需要將其轉換爲:

<article article-type="research-article" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML"> 
<body> 
<graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="zee9991370930006.g.eps"/> 
<self-uri xlink:title="pdf" xlink:href="zee00813002857.pdf" xmlns:xlink="http://www.w3.org/1999/xlink"/> 
</body> 
</article> 

我在XSLT 2.0中使用以下命令爲每個元素的名稱空間屬性是必需的:

<xsl:namespace name="xlink" select="'http://www.w3.org/1999/xlink'"/> 
<xsl:namespace name="mml" select="'http://www.w3.org/1998/Math/MathML'"/> 

但問題是我得到的命名空間屬性只有一個元素即article。我也在xslt的開頭聲明瞭命名空間。無法弄清楚什麼是確切的問題。任何形式的幫助都會得到真正的讚賞。謝謝。

+0

所以你得到了你想要在根中的命名空間,爲什麼你想要在其他任何節點相同?只是用它! – AmeetC

+0

其實這個要求就是這樣! – GTM

+0

,我希望你能理解這些含義! XSLT由您的XML生成器根據規範生成XML。在根節點上定義它使其可用於其下的所有節點,同時在該節點上定義僅使該節點的子元素可用。 – AmeetC

回答

0

XML生成器不應該做你想做的。他們將根據規格生成您的XML。不建議您在所有使用它們的元素中定義相同的名稱空間!這使得它變得冗長,醜陋和奇怪的做法。

如果僅在頂部(根元素)定義名稱空間,那麼會出現什麼問題?您只能在需要它的元素中使用它。簡單。

OP的評論:我需要它在根和我已經宣佈它,但它不可用於它下面的節點,即圖形和自我uri在我的情況下)。 你檢查過你的XML是否格式良好?如果你在這裏發佈的是完整的xml,那麼graphic和self-uri應該總是有可用的名稱空間。出於上述原因,您應該瞄準以下輸出。

<article article-type="research-article" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML"> 
    <body> 
    <graphic xlink:href="zee9991370930006.g.eps"/> 
    <self-uri xlink:title="pdf" xlink:href="zee00813002857.pdf"/> 
    </body> 
</article> 
+0

沒有格局問題。我同意你的第一點。但是,你知道這些要求..我會考慮你的觀點。 – GTM