我正在尝试访问使用名称空间的.xml文件中的节点,并对其进行排序。它不起作用,我认为这与名称空间有关,并且无法正确限定它们。
我有一个index.xml,我用它来组合我需要的文档,看起来像这样:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="merge.xsl"?>
<pic:catalog xmlns:pic = "pictureCatalog">
<pic:logo>Logo</pic:logo>
<Author>User Name</Author>
<pic:allPhotos>photos</pic:allPhotos>
</pic:catalog>
photos.xml如下所示:
<?xml version="1.0"?>
<pic:photoCatalog xmlns:pic="pictureCatalog">
<pic:photo>
<pic:title>Alcazar</pic:title>
<pic:location>Segovia - Spain</pic:location>
<pic:date>Jan 2013</pic:date>
<pic:camera>Sony</pic:camera>
<pic:resolution>12px</pic:resolution>
<pic:format>.jpg</pic:format>
<pic:description>
Medieval Castle over the hill overlooking the city.
</pic:description>
</pic:photo>
</pic:photoCatalog>
我的xsl样式表如下所示:
<!-- All the photos-->
<xsl:template match = "pic:catalog/pic:allPhotos">
<html>
<head>
<link rel="stylesheet" type="text/css" href="Style.css" />
</head>
<body>
<xsl:for-each select="pic:photoCatalog/pic:photo"><br/>
<xsl:sort select="pic:location"/>
<xsl:value-of select="pic:photoCatalog/pic:photo/pic:location"/>
</xsl:for-each>
</body>
</html>
</xsl:template>
有人能帮上忙吗?
Bluetxxth
发布于 2013-01-24 23:15:12
这里有两个XML文件,但是XSLT只应用于index.xml,没有引用photos.xml anywhere。如果您想访问第二个文档,通常会在XSLT中看到。
第二个文件名看起来保存在index.xml的pic:allPhotos元素中,您想要访问该文件并迭代照片。在这种情况下,您需要更改for-each xsl:来访问文档,如下所示
<xsl:for-each select="document(concat(., '.xml'))/pic:photoCatalog/pic:photo">
下一个问题是,此时您将在xsl:语句之前输出排序br排序元素。这是无效的,因为排序xsl:应该紧跟在xsl:for-each.后面
<xsl:for-each select="document(concat(., '.xml'))/pic:photoCatalog/pic:photo">
<xsl:sort select="pic:location"/>
<br/>
此外,您的xsl:value-of也不太正确。在调用这一点时,您处于xsl:for-each循环中,因此已经定位在pic:photo元素上,因此可以将其简化为以下内容
<xsl:value-of select="pic:location"/>
尝试以下XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:pic="pictureCatalog" exclude-result-prefixes="pic">
<xsl:template match="/pic:catalog">
<xsl:apply-templates select="pic:allPhotos"/>
</xsl:template>
<xsl:template match="pic:catalog/pic:allPhotos">
<html>
<head>
<link rel="stylesheet" type="text/css" href="Style.css"/>
</head>
<body>
<xsl:for-each select="document(concat(., '.xml'))/pic:photoCatalog/pic:photo">
<xsl:sort select="pic:location"/>
<br/>
<xsl:value-of select="pic:location"/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
它输出以下内容
<html>
<head>
<META http-equiv="Content-Type" content="text/html">
<link rel="stylesheet" type="text/css" href="Style.css">
</head>
<body><br>Segovia - Spain</body>
</html>
顺便说一句,您的名称空间都是正确存在的!(好吧,假设你也在xsl:stylesheet上声明了它是正确的)
https://stackoverflow.com/questions/14510732
复制