2012-05-24 106 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

不错的建议。这个论坛上有一些非常有耐心的人,他们会耐心地回答这个问题,好像它从未被问过。我恐怕我不是其中之一;但我仍然试图通过提供一些人们可以在谷歌上搜索的条款来提供帮助。 –