我有一个XML我想做一些我似乎无法在Java中工作的转换。下面我提供了输入,所需的输出和我的尝试。我不知道我在这里做错了什么,感谢任何帮助。
总结一下,我想基本上做三个转换:
我的猜测是我复制时出了点问题。也许在复制后我会覆盖一些东西。
这是我的意见:
<section class="stage" >
<figure class="circle ball" id="1"><span class="shadow"></span></figure>
</section>
<section class="stage" >
<figure class="circle ball" id="2"><span class="shadow"></span></figure>
</section>
<section class="stage" >
<figure class=" circle ball" id="3"><span class="shadow"></span></figure>
</section>
这是我想要的输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Structure xmlns="http://www.example.com/xsd/Structure"
version="2.0"
name="myName">
<Graph name="test">
<Vertices>
<Vertex name="n1" kind="input"/>
<Vertex name="n2" kind="output"/>
</Vertices>
<Edges>
<Edge start="n1" end="n2">
<Transformation>
<Entry entry="1"/>
</Transformation>
</Edge>
</Edges>
</Graph>
</Structure>
这是我的XSLT:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Structure xmlns:cs="http://www.example.com/xsd/ControlStructure"
xmlns="http://www.example.com/xsd/Structure" version="3.0"
name="myName"> <--- Declared name space and changed version
<Graph name="test">
<Vertices>
<Vertex name="n1" kind="input"/>
<Vertex name="n2" kind="output"/>
</Vertices>
<Edges>
<Edge start="n1" end="n2">
<cs:Transformation> <--- Added name space
<Entry entry="1"/>
</cs:Transformation> <--- Added name space
</Edge>
</Edges>
</Graph>
</Structure>
答案 0 :(得分:0)
您已经有一个参数cs绑定到新命名空间,您没有使用它。目前尚不清楚您是否真的希望新命名空间成为运行时参数,或者它是否可以进行硬编码。如果您希望它是一个参数,那么最好的办法是切换到XSLT 2.0处理器并使用xsl:namespace。
否则,你就是在正确的路线上。
您更改版本属性的模板无效,因为它永远不会触发:因为您的Structure元素模板不会更改属性,而是应用模板。
在指令<xsl:element name="cs:{local-name()}">
中,您应添加namespace
属性以定义新的命名空间URI。否则它会查找前缀&#34; cs&#34;的绑定。在样式表中,并没有一个。它在结果树中具有绑定是不够的。