2016-12-20 73 views
0

我知道這是一個簡單的問題。我仍然在學習和熟悉XSLT編碼。我在我的XSLT中遇到問題,我不知道我是否正確執行了這個操作。我需要從輸入文件中獲取值並將其存儲在新元素標記名稱中,並且我不需要填充名稱空間和屬性父元素上的內容。我做了一個關於這方面的研究,我看到了很多參考文獻,但我無法應用它。如果根元素沒有任何名稱空間和屬性,我所做的XSLT(v02)工作正常(僅從參考中複製)。但是,當我放置一個名稱空間和屬性時,沒有輸出填充。無法讀取xslt中的命名空間和屬性

輸入文件

<Root xmlns="http://abcd.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" releaseID="9.2" versionID="2.12.3" xsi:schemaLocation="abcd.com abcd.xsd"> 
    <Element> 
     <Field>AAAAA</Field> 
    </Element> 
    <Element> 
     <Field>BBBBB</Field> 
    </Element> 
    <Element> 
     <Field>CCCCC</Field> 
    </Element> 

XSLT文件

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:template match="/"> 
    <NewRecord> 
     <xsl:for-each select="Root/Element"> 
      <NewTransaction> 
       <Position> 
        <xsl:value-of select="position()"/> 
       </Position> 
       <TransactionID> 
        <xsl:value-of select="Field"/> 
       </TransactionID> 
      </NewTransaction> 
     </xsl:for-each> 
    </NewRecord> 
</xsl:template> 

輸出產生

<NewRecord/> 

我預期的輸出應該是這樣的:

<NewRecord> 
<NewTransaction> 
    <Position>1</Position> 
    <TransactionID>AAAAA</TransactionID> 
</NewTransaction> 
<NewTransaction> 
    <Position>2</Position> 
    <TransactionID>BBBBB</TransactionID> 
</NewTransaction> 
<NewTransaction> 
    <Position>3</Position> 
    <TransactionID>CCCCC</TransactionID> 
</NewTransaction> 

我認爲這個問題是在<xsl:template match="/">,我還是我需要在節點上迷茫放。感謝您的幫助。

+0

[XSLT與默認命名空間設置爲xmlns的XML源]的可能重複(http://stackoverflow.com/questions/1344158/xslt-with-xml-source-that-has-a-default-namespace -set-to-xmlns) – teppic

+0

當你的問題被標記爲'xslt-2.0'時,爲什麼你的樣式表聲明'version =「1.0」'? –

+0

@ michael。 hor257k,我忘了更改版本,但我真的使用v02。謝謝。 –

回答

1

如果你真的使用XSLT 2.0,您只需要添加:

xpath-default-namespace="http://abcd.com" 

stylesheet標籤,並保留一切不變。

+0

嗨,非常感謝。它確實有效。 –

1

如果您使用XSLT 1.0,你必須聲明在樣式表相同的命名空間,並使用你映射到命名空間前綴來限定元素的名稱:

前綴可以任何你想要的。我選擇了abcd以匹配您的示例,但它可以是任何合法標識符。

<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:abcd="http://abcd.com"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/"> 
     <NewRecord> 
      <xsl:for-each select="abcd:Root/abcd:Element"> 
       <NewTransaction> 
        <Position> 
         <xsl:value-of select="position()"/> 
        </Position> 
        <TransactionID> 
         <xsl:value-of select="abcd:Field"/> 
        </TransactionID> 
       </NewTransaction> 
      </xsl:for-each> 
     </NewRecord> 
    </xsl:template> 
</xsl:stylesheet> 
+0

嗨,感謝您的反饋。 –