我正在尝试使用XSLT对XML进行简单的转换来生成HTML,但是我遇到了困难而且我似乎无法弄清楚问题是什么。以下是我正在使用的XML示例:
<?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节点显示为“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 :(得分: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>
答案 1 :(得分:1)
我担心你已经成为初学者的头号XSLT陷阱:我们每天至少在这个论坛上看到这个问题。您的元素位于命名空间中,并且样式表正在尝试匹配无命名空间中的节点。