2011-05-19 48 views
0

我有一個html,我想使用html-agility-pack庫將它解析爲xml。這裏的xsl:XSL - 無法向根節點添加名稱空間

<?xml version="1.0" encoding="utf-8" ?> 
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <BusinessDetail> 
     <Name> 
     <xsl:value-of select="//span[@class='pp-place-title']/span" /> 
     </Name> 
     <Address> 
     <xsl:value-of select="//span[@class='pp-headline-item pp-headline-address']/span"/> 
     </Address> 
     ... 
    </BusinessDetail> 
    </xsl:template> 
</xsl:stylesheet> 

我只想添加一個命名空間到根節點。預期的輸出是:

<BusinessDetail xmlns:g="http://myurl.com"> 
    <Name> 
    ... 
    </Name> 
    .. 
</BusinessDetail> 

因此改變我XLS到:

<?xml version="1.0" encoding="utf-8" ?> 
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <BusinessDetail xmlns:g="http://myurl.com"> 
     <Name> 
     <xsl:value-of select="//span[@class='pp-place-title']/span" /> 
     </Name> 
     <Address> 
     <xsl:value-of select="//span[@class='pp-headline-item pp-headline-address']/span"/> 
     </Address> 
     ... 
    </BusinessDetail> 
    </xsl:template> 
</xsl:stylesheet> 

但該命名空間不會出現在輸出中。有什麼不對?

回答

0

恐怕您嘗試創建的輸出沒有任何意義!想想以下文件的含義:

<BusinessDetail xmlns:g="http://myurl.com"> 
    <Name> 
    ... 
    </Name> 
    .. 
</BusinessDetail> 

要定義命名空間前綴「G」,它映射到URI http://myurl.com,但是,你的文件不包含任何被定義爲這個命名空間內的任何元素! XSLT的輸出非常正確地刪除了這個冗餘名稱空間聲明。您的意思是做這一翻譯:

<BusinessDetail xmlns="http://myurl.com"> 
    <Name> 
    ... 
    </Name> 
    .. 
</BusinessDetail> 

這確保了BusinessDetail及其所有子元素都在http://myurl.com命名空間。

0

您需要的命名空間添加到樣式表

<?xml version="1.0" encoding="utf-8" ?> 
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:g="http://myurl.com"> 
    <xsl:template match="/"> 
    <BusinessDetail> 
     <Name> 
     <xsl:value-of select="//span[@class='pp-place-title']/span" /> 
     </Name> 
     <Address> 
     <xsl:value-of select="//span[@class='pp-headline-item pp-headline-address']/span"/> 
     </Address> 
     ... 
    </BusinessDetail> 
    </xsl:template> 
</xsl:stylesheet> 

但是,除非你指定使用該命名空間的任何節點(例如你不超出其定義),它不會出現在輸出。

+0

嗨 - 我不同意,您不必將名稱空間添加到xsl:stylesheet元素,它可以出現在文檔中的任何位置。但是,是的,你是對的,除非它被使用,它不會出現在輸出中! – ColinE 2011-05-19 07:58:35

+0

@ColinE也許這是我的錯誤措辭,加強了一個例子,加強了具體的情況。至少我沒有參加我的初稿,包括命名空間別名:) – 2011-05-19 08:50:15

相關問題