XSLT未正确应用于XML文件
我对以下2个文件仍然有问题: 这是我的XML文件:XSLT未正确应用于XML文件,xml,xslt,Xml,Xslt,我对以下2个文件仍然有问题: 这是我的XML文件: <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="try.xsl" ?> <Data xmlns="http://www.digitalmeasures.com/schema/data" xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="try.xsl" ?>
<Data xmlns="http://www.digitalmeasures.com/schema/data" xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata" dmd:date="2017-03-08">
<Record userId="736234" username="sample" termId="1281" dmd:surveyId="5792614">
<dmd:IndexEntry indexKey="COLLEGE" entryKey="College Name" text="College Name"/>
<PCI id="27109339736" dmd:lastModified="2016-12-28T17:50:26">
<PREFIX>Mr.</PREFIX>
<FNAME>John</FNAME>
<PFNAME>John</PFNAME>
<MNAME/>
<LNAME>Smith</LNAME>
<SUFFIX>Jr</SUFFIX>
<ALT_NAME>J</ALT_NAME>
<ENDPOS/>
<EMAIL>sample@domain.com</EMAIL>
<BUILDING>Central</BUILDING>
<ROOMNUM>100</ROOMNUM>
<OPHONE1>303</OPHONE1>
<OPHONE2>555</OPHONE2>
<OPHONE3>1212</OPHONE3>
<DPHONE1>303</DPHONE1>
<DPHONE2>555</DPHONE2>
<DPHONE3>1213</DPHONE3>
<FAX1/>
<FAX2/>
<FAX3/>
<WEBSITE/>
<DTM_DOB/>
<DTD_DOB/>
<DTY_DOB/>
<DOB_START></DOB_START>
<DOB_END></DOB_END>
<BIO/>
<TEACHING_INTERESTS/>
<RESEARCH_INTERESTS/>
</PCI>
</Record>
</Data>
我用作示例的学习材料如下:
https://www.w3schools.com/xml/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog
但是我看不出在我的例子中我做错了什么。您(正确地)声明了dta
前缀并将其绑定到输入XML默认名称空间-但您没有使用它。因此,第二个和第三个模板不匹配任何内容,整个输入由第一个模板处理,生成与输入相同的输出
请尝试:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dta="http://www.digitalmeasures.com/schema/data"
xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata"
exclude-result-prefixes="dta dmd">
<xsl:output method="html" />
<xsl:template match="dta:Data"> <!-- matches /Data root element -->
<html>
<body bgcolor="lightgreen">
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="dta:Record/dta:PCI"> <!-- matches sub-elements -->
<h1>Digital Measures PCI Screen Info:</h1>
<B>Prefix: </B><xsl:value-of select="dta:PREFIX"/><br />
<B>Prefix: </B><xsl:value-of select="dta:PREFIX"/><br />
<B>First Name: </B><xsl:value-of select="dta:FNAME"/><br />
<B>Preferred First Name: </B><xsl:value-of select="dta:FNAME"/><br />
<B>Middle Name: </B><xsl:value-of select="dta:MNAME"/><br />
</xsl:template>
</xsl:stylesheet>
数字测量PCI屏幕信息:
前缀:
前缀:
名字:
首选名:
中间名:
另外请注意,第5行中有一个不匹配的
-->
结束注释标记。您的困难源于命名空间问题。因此,请参考
规则中的命名空间“”
这是一个如何做到这一点的示例:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dta="http://www.digitalmeasures.com/schema/data"
xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata"
exclude-result-prefixes="dta dmd">
<xsl:output method="html" />
<xsl:template match="node()|@*"> <!-- identity template -->
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="dta:Data"> <!-- matches /Data root element -->
<html>
<body bgcolor="lightgreen">
<xsl:apply-templates select="node()|@*" />
</body>
</html>
</xsl:template>
<xsl:template match="dta:Record/dta:PCI"> <!-- matches sub-elements -->
<h1>Digital Measures PCI Screen Info:</h1>
<B>Prefix: </B>
<xsl:value-of select="dta:PREFIX" />
<br />
<B>Prefix: </B>
<xsl:value-of select="dta:PREFIX" />
<br />
<B>First Name: </B>
<xsl:value-of select="dta:FNAME" />
<br />
<B>Preferred First Name: </B>
<xsl:value-of select="dta:FNAME" />
<br />
<B>Middle Name: </B>
<xsl:value-of select="dta:MNAME" />
<br />
</xsl:template>
</xsl:stylesheet>
数字测量PCI屏幕信息:
前缀:
前缀:
名字:
首选名:
中名:
要更正的第一件事:从样式表
标记的末尾删除-->
第二件事:添加缺少的名称空间。模板匹配数据
应该是:
<xsl:template match="dta:Data">
<html>
<body bgcolor="lightgreen">
<xsl:apply-templates select="dta:Record/dta:PCI" />
</body>
</html>
</xsl:template>
我使用Xalan引擎使用在线XSLT验证器(xsltransform.net)对其进行了检查。“我希望输出在其自己的行上显示人员信息中的每个项目”--不,您希望XSLT输出HTML,并在其自己的行上显示每个项目。要从等式中删除浏览器,请在本地运行转换,捕获HTML输出,并向我们显示该输出,而不是浏览器所做的。这是一个名称空间问题,而且标识模板是不必要的,应该删除。在XPath中,即使在样式表中有一个<代码> xMLNS=…,也可以将非前缀匹配放在空白命名空间中。只需搜索“XSLT默认命名空间”就可以找到日常问题的每日答案。(顺便说一句,为了学习XSLT编码技巧,你可能比花点时间浏览这个网站更糟糕。)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dta="http://www.digitalmeasures.com/schema/data"
xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata"
exclude-result-prefixes="dta dmd">
<xsl:output method="html" />
<xsl:template match="node()|@*"> <!-- identity template -->
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="dta:Data"> <!-- matches /Data root element -->
<html>
<body bgcolor="lightgreen">
<xsl:apply-templates select="node()|@*" />
</body>
</html>
</xsl:template>
<xsl:template match="dta:Record/dta:PCI"> <!-- matches sub-elements -->
<h1>Digital Measures PCI Screen Info:</h1>
<B>Prefix: </B>
<xsl:value-of select="dta:PREFIX" />
<br />
<B>Prefix: </B>
<xsl:value-of select="dta:PREFIX" />
<br />
<B>First Name: </B>
<xsl:value-of select="dta:FNAME" />
<br />
<B>Preferred First Name: </B>
<xsl:value-of select="dta:FNAME" />
<br />
<B>Middle Name: </B>
<xsl:value-of select="dta:MNAME" />
<br />
</xsl:template>
</xsl:stylesheet>
<xsl:template match="dta:Data">
<html>
<body bgcolor="lightgreen">
<xsl:apply-templates select="dta:Record/dta:PCI" />
</body>
</html>
</xsl:template>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dta="http://www.digitalmeasures.com/schema/data"
xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata"
exclude-result-prefixes="dta dmd">
<xsl:output method="html" />
<xsl:template match="node()|@*">
<xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
</xsl:template>
<xsl:template match="dta:Data">
<html>
<body bgcolor="lightgreen">
<xsl:apply-templates select="dta:Record/dta:PCI" />
</body>
</html>
</xsl:template>
<xsl:template match="dta:PCI">
<h1>Digital Measures PCI Screen Info:</h1>
<B>Prefix: </B><xsl:value-of select="dta:PREFIX"/><br />
<B>Prefix: </B><xsl:value-of select="dta:PREFIX"/><br />
<B>First Name: </B><xsl:value-of select="dta:FNAME"/><br />
<B>Preferred First Name: </B><xsl:value-of select="dta:FNAME"/><br />
<B>Middle Name: </B><xsl:value-of select="dta:MNAME"/><br />
</xsl:template>
</xsl:stylesheet>