2012-05-24 39 views
0

我想用XSLT做一個簡單的XML轉換來生成HTML,但我有困難,我似乎無法弄清楚問題出在哪裏。這裏是我一起工作的XML的一個樣本:xslt轉換xml輸出HTML問題

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="C:\Users\cgubata\Documents\Digital Measures\jcamp_fac_ex_xslt.xsl"?> 
<Data xmlns="http://www.digitalmeasures.com/schema/data" xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata" dmd:date="2012-02-27"> 
<Record userId="310106" username="jcamp" termId="453" dmd:surveyId="1154523"> 
    <dmd:IndexEntry indexKey="COLLEGE" entryKey="School of Business" text="School of Business"/> 
    <dmd:IndexEntry indexKey="DEPARTMENT" entryKey="Accountancy" text="Accountancy"/> 
    <dmd:IndexEntry indexKey="DEPARTMENT" entryKey="MBA" text="MBA"/> 
    <PCI id="11454808064" dmd:lastModified="2012-02-08T13:17:39"> 
     <PREFIX>Dr.</PREFIX> 
     <FNAME>Julia</FNAME> 
     <PFNAME/> 
     <MNAME>M.</MNAME> 
     <LNAME>Camp</LNAME> 
     <SUFFIX/> 
     <ALT_NAME>Julia M. Brennan</ALT_NAME> 
     <ENDPOS/> 

所有我想要做的是有一些節點顯示在HTML中的價值。因此,例如,我可能希望PREFIC,FNAME,LNAME節點顯示爲「Dr. Julia Camp」(沒有引號 - 稍後我會做樣式)。這裏是我使用的XSL:

<?xml version="1.0" encoding="utf-8"?><!-- DWXMLSource="jcamp_fac_ex.xml" --> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata"> 
<xsl:output method="html" encoding="utf-8"/> 
<xsl:template match="/"> 

<xsl:value-of select="/Data/Record/PCI/PREFIX"/> 

</xsl:template> 
</xsl:stylesheet> 

從我一直在研究,應該顯示該PREFIX字段的值。但是,它將輸出所有節點的所有值(因此,如果有4000個具有文本值的節點,則會得到4000個以HTML格式返回的值)。我的目標是從某些節點中提取值,並且我可能會將它們排列在一個表中。

如何從特定節點取出值?提前致謝。

+0

搜索因特網(Bing):「XPath默認命名空間」 - 應該有數百條信息豐富的結果。 –

回答

1

那麼,我不能重現你的症狀。當我測試你發佈的內容時,它根本不會產生任何輸出。這看起來正確,因爲你的xpath正在測試錯誤的命名空間。您需要在您的xslt中爲http://www.digitalmeasures.com/schema/data名稱空間添加名稱空間前綴映射,然後在value-of xpath中使用它。就像這樣:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata" 
    xmlns:dm="http://www.digitalmeasures.com/schema/data"> 
    <xsl:output method="html" encoding="utf-8"/> 
    <xsl:template match="/"> 
     <xsl:value-of select="/dm:Data/dm:Record/dm:PCI/dm:PREFIX"/> 
    </xsl:template> 
</xsl:stylesheet> 
+0

非常感謝!我知道我錯過了一些東西,並且將命名空間前綴添加到模式中也有訣竅。再次感謝!! – Chris

1

恐怕你已經掉進了頭號XSLT陷阱初學者:我們每天至少一次看到這個問題,在這個論壇。您的元素位於名稱空間中,並且您的樣式表正試圖匹配沒有名稱空間中的節點。

+0

請提供一些更有針對性的指導,以便OP可以瞭解哪裏需要關注。 – ABach

+0

不錯的建議。這個論壇上有一些非常有耐心的人,他們會耐心地回答這個問題,好像它從未被問過。我恐怕我不是其中之一;但我仍然試圖通過提供一些人們可以在谷歌上搜索的條款來提供幫助。 –