0

我正在尝试使用 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 节点显示为“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 个具有文本值的节点,我将在 HTML 中返回 4000 个值)。我的目标是从某些节点中提取值,我可能会将它们排列在一个表中。

如何从特定节点中提取值?提前致谢。

4

2 回答 2

1

恐怕您已经掉入了 XSLT 初学者的头号陷阱:我们在这个论坛上每天至少看到一次这个问题。您的元素位于命名空间中,并且您的样式表试图匹配没有命名空间中的节点。

于 2012-05-24T22:46:13.683 回答
1

好吧,我无法重现你的症状。当我测试您发布的内容时,它根本不会产生任何输出。这看起来是正确的,因为您的 xpath 正在测试错误的名称空间。您需要在 xslt 中为命名空间添加命名空间前缀映射http://www.digitalmeasures.com/schema/data,然后在value-ofxpath 中使用它。像这样:

<?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>
于 2012-05-24T20:51:18.780 回答