我使用IE 11和firefox进行测试
以下运行良好:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="LEDES21Basic.xslt" type="text/xsl"?>
<ledesxml>
<firm>
<lf_vendor_id>GB 12 345 6789</lf_vendor_id>
<lf_id>FR12-3456789</lf_id>
<lf_name>Alpha & Beta, LLC</lf_name>
</firm>
</ledesxml>
使用以下样式表
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:t="http://www.ledes.org/ledes2000.xsd"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Acounting document</title>
</head>
<body>
<p>BODY</p>
<xsl:value-of select="/ledesxml/firm/lf_name"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
但是,我真正的xml文件是:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="LEDES21Basic.xslt" type="text/xsl"?>
<ledesxml xmlns="http://www.ledes.org/ledes2000.xsd">
<firm>
<lf_vendor_id>GB 12 345 6789</lf_vendor_id>
<lf_id>FR12-3456789</lf_id>
<lf_name>Alpha & Beta, LLC</lf_name>
</firm>
</ledesxml>
您注意到名称空间。前面的样式表无法转换xml。 我尝试了两件事:更改我的xpath表达式,使用xpath-default-namespace属性:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:t="http://www.ledes.org/ledes2000.xsd"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="html" indent="yes"/>
<xsl:template match="t:/">
<html>
<head>
<title>Acounting document</title>
</head>
<body>
<p>BODY</p>
<xsl:value-of select="t:/ledesxml/firm/lf_name"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
他们都失败了。 Firefox说:xpath表达式分析失败。
====接下来尝试========================================= ===============
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:t="http://www.ledes.org/ledes2000.xsd"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Acounting document</title>
</head>
<body>
<p>BODY</p>
<xsl:value-of select="/t:ledesxml/t:firm/t:lf_name"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
没有更多的xpath错误但没有预期的结果:lf_name未被转换。
如何在不删除命名空间的情况下转换我的xml文件?
答案 0 :(得分:1)
xpath-default-namespace
仅适用于Saxon 9,Saxon CE,XmlPrime,Altova等XSLT 2.0处理器,浏览器仅支持XSLT 1.0。至于使用前缀,是的,这是正确的方法,但正确的语法是为任何元素名称添加前缀,如<xsl:value-of select="/t:ledesxml/t:firm/t:lf_name"/>
中所示。并保留match="/"
原样,前缀仅用于限定名称。