Xml xls stylsheet的正确定义
我正试图使用一个我从中修改的java代码来提取下面示例xml数据中“node”元素中的所有属性。输出是一个空白的csv,只有我在样式表中定义的标题。由于代码正常工作,我怀疑样式表定义不正确,但我不知道如何修复它。我怎样才能纠正它 sample.xmlXml xls stylsheet的正确定义,xml,xslt,Xml,Xslt,我正试图使用一个我从中修改的java代码来提取下面示例xml数据中“node”元素中的所有属性。输出是一个空白的csv,只有我在样式表中定义的标题。由于代码正常工作,我怀疑样式表定义不正确,但我不知道如何修复它。我怎样才能纠正它 sample.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE network SYSTEM "http://www.matsim.org/files/dtd/network_v2.dtd">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE network SYSTEM "http://www.matsim.org/files/dtd/network_v2.dtd">
<network>
<nodes>
<node id="1" x="-53196.450154726146" y="-3755010.0058102254" >
</node>
<node id="10" x="-54879.37761845079" y="-3753903.660850382" >
</node>
<node id="100" x="-46659.23389528884" y="-3749500.821686937" >
</node>
<node id="101" x="-54624.44957950422" y="-3757195.8898357535" >
</node>
</nodes>
</network>
style.xsl
?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" >
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
id,x,y
<xsl:for-each select="//node">
<xsl:value-of select="node/@*"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
?xml version=“1.0”>
id,x,y
这里有两个问题。两者都发生在同一语句中
<xsl:value-of select="node/@*"/>
然而,这导致了第二个问题。在XSLT1.0中,xsl:value of
仅在给定节点集时返回第一个节点的值,因此尽管@*
将选择所有节点,但执行
操作将只输出第一个节点
现在,你可以这样做
<xsl:for-each select="@*">
<xsl:value-of select="." />
</xsl:for-each>
但是属性不是在XML中排序的,因此不能保证它们将按照您期望的顺序返回。因此,可以肯定的是,您必须显式地选择属性
<xsl:value-of select="@id" />
<xsl:value-of select="@x" />
<xsl:value-of select="@y" />
这里有两个问题。两者都发生在同一语句中
<xsl:value-of select="node/@*"/>
然而,这导致了第二个问题。在XSLT1.0中,xsl:value of
仅在给定节点集时返回第一个节点的值,因此尽管@*
将选择所有节点,但执行
操作将只输出第一个节点
现在,你可以这样做
<xsl:for-each select="@*">
<xsl:value-of select="." />
</xsl:for-each>
但是属性不是在XML中排序的,因此不能保证它们将按照您期望的顺序返回。因此,可以肯定的是,您必须显式地选择属性
<xsl:value-of select="@id" />
<xsl:value-of select="@x" />
<xsl:value-of select="@y" />
以什么方式“不正确”以什么方式“不正确”?