【问题标题】:Accessing Nodes from external XML with document() XSLT使用 document() XSLT 从外部 XML 访问节点
【发布时间】:2012-09-22 21:20:10
【问题描述】:

我正在尝试遍历 SVG 目录以访问其中的一些元数据。但是,当我尝试在每个节点中获取特定节点的值时,我可以很好地迭代,我似乎失败了。

使用 SaxonHE 9.4 (Java) 进行转换。

这里的例子看起来很简单:

<xsl:value-of select="document('geneva.xml')/ph:photo/ph:title"/>

http://www.ibm.com/developerworks/xml/library/x-tipcombxslt/

但我有我的 XSLT(相关部分;没有迭代 atm 只是一个获取外部节点值的测试):

<div>
<p><xsl:value-of select="document('images/test.svg')"/></p>
</div>

但这一切给我的是:

<div><p>Mine
circle:hover {fill-opacity:0.9;}
</p></div>

我已经尝试过document('images/test.svg')/svg/title,但这并没有给我任何回报

test.svg

<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" 
          "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<title>Mine</title>
<style type="text/css">
circle:hover {fill-opacity:0.9;}
</style>
<g style="fill-opacity:0.7;">
<circle cx="6.5cm" cy="2cm" r="100" style="fill:red; stroke:black; stroke-width:0.1cm" transform="translate(0,50)" />
<circle cx="6.5cm" cy="2cm" r="100" style="fill:blue; stroke:black; stroke-width:0.1cm" transform="translate(70,150)" />
<circle cx="6.5cm" cy="2cm" r="100" style="fill:green; stroke:black; stroke-width:0.1cm" transform="translate(-70,150)"/>
</g>
</svg>

【问题讨论】:

    标签: xslt svg saxon


    【解决方案1】:

    SVG 元素绑定到 SVG 命名空间。它没有命名空间前缀:

    <svg xmlns="http://www.w3.org/2000/svg">
    

    因此,您需要在 XSLT 中使用命名空间前缀声明该命名空间,并使用该命名空间前缀来处理 XPath 中的 SVG 元素:

    document('images/test.svg')/svg:svg/svg:title
    

    【讨论】:

    • 美丽的&lt;xsl:value-of xmlns:svg="http://www.w3.org/2000/svg" select="document('images/test.svg')/svg:svg/svg:title"/&gt; 总是给我带来问题的命名空间。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多