2013-04-18 112 views
2

我需要使用xslt從一種xml格式轉換爲另一種xml。最初,我嘗試了沒有名稱空間,並且知道了它。但是當我嘗試使用名稱空間xmlns =「http://ws.wso2.org/dataservice」它不工作沒有前綴作爲xmlns:D =「http://ws.wso2.org/dataservice」在給定的XML文件xslt中的XML名稱空間處理

<test xmlns="http://ws.wso2.org/dataservice"> 
<datarows> 
    <name>Name</name> 
</datarows> 
<datarows> 
    <name>karthik</name> 
</datarows> 
</testcsv> 

我需要的XML文件,XSL轉換後像

<head> 
<names>Name</names> 
<names>karthik</names> 
</head> 

幫我用XSLT

我試圖使用XSLT作爲

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://ws.wso2.org/dataservice" exclude-result-prefixes="d" > 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <namespace-alias stylesheet-prefix="xsl" result-prefix="#default"/> 


    <xsl:template match="/"> 
    <head> 
     <xsl:for-each select="testcsv/datarows"> 
      <names> 
       <xsl:value-of select="name" /> 
      </names> 
     </xsl:for-each> 
     </head> 
    </xsl:template> 
</xsl:stylesheet> 
+0

您是否嘗試搜索以前有關此主題的問題?幾乎每天都會問這個問題,而且答案很容易找到。 – 2013-04-18 10:43:32

回答

0

據我所知你會(或可能)不會改變你的xml中的xmlns聲明(也許是b因爲它是在其他地方生成的)。比你必須在你的xlst中使用xml節點前綴。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:d="http://ws.wso2.org/dataservice" 
    exclude-result-prefixes="d" 
    > 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:template match="/"> 
     <head> 
      <xsl:for-each select="d:testcsv/d:datarows" > 
       <names> 
        <xsl:value-of select="d:name" /> 
       </names> 
      </xsl:for-each> 
     </head> 
    </xsl:template> 
</xsl:stylesheet> 
2

請更改以下列表: 1.您的輸入XML格式不正確。請將根元素更改爲<testcsv> 2.從XSLT中刪除<namespace-alias stylesheet-prefix="xsl" result-prefix="#default"/>,因爲它不是必需的。 3.添加命名空間的xmlns:在您輸入XML d = 「http://ws.wso2.org/dataservice」

輸入XML:

<?xml version="1.0"?> 
<testcsv xmlns:d="http://ws.wso2.org/dataservice"> 
<datarows> 
    <name>Name</name> 
</datarows> 
<datarows> 
    <name>karthik</name> 
</datarows> 
</testcsv> 

XSLT轉換:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://ws.wso2.org/dataservice" exclude-result-prefixes="d" > 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 

    <xsl:template match="/"> 
    <head> 
     <xsl:for-each select="testcsv/datarows"> 
      <names> 
       <xsl:value-of select="name" /> 
      </names> 
     </xsl:for-each> 
     </head> 
    </xsl:template> 
</xsl:stylesheet> 

輸出:

<head> 
    <names>Name</names> 
    <names>karthik</names> 
</head>