我有一个看起来像这样的 XML 文件:
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type="text/xsl" href="http://url/stylesheet.xsl"?>
<first xmlns="http://www.loc.gov/zing/srw/">
<element1>And</element1>
<e2>I said</e2>
<e3>
<e4>
<mods version="3.0"
xmlns:bla="http://www.w3.org/1999/xlink"
xmlns:bla2="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.loc.gov/mods/v3"
xsi:schemaLocation="http://www.loc.gov/mods/v3">
<f1>What about</f1>
<f2>Breakfast at Tiffany's</f2>
</mods>
</e4>
</e3>
</first>
另一方面,我有一个 XSL 文件来通过 XPath 获取元素:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:n="http://www.loc.gov/zing/srw/"
xmlns:o="http://www.loc.gov/mods/v3">
<xsl:template match="/">
<html><head></head><body>
<xsl:value-of select="n:first/n:e2"/>
</body></html>
</xsl:template>
</xsl:stylesheet>
有了这个,我可以获取元素 e2 说 我说但是我无法访问元素 f4 说早餐在 Tiffany's 。XPath 是否假定元素 f4 有两个命名空间(默认命名空间 xmlns="http://www.loc.gov/zing/srw/" 首先在根元素中声明,元素mods 的命名空间 xmlns="http: //www.loc.gov/mods/v3") 还是 mods 命名空间 xmlns="http://www.loc.gov/mods/v3" 是 mods 元素的所有子元素的唯一命名空间?如果没有在我的 xsl 文件中声明前缀,我真的可以更轻松地访问元素 e2 吗?我刚开始使用 XML/XSL,所以我希望我的问题很清楚。