xslt 需要元素而不是 xsl:for-each
xslt expects element instead of xsl:for-each
由于我是 xslt/xsd-programming 的初学者,我正在使用 XMLSpy 创建一个 xml2xml 转换。对于两个 xml,我都有一个 xsd。不幸的是,以下代码片段无效。
<xsl:template match="/">
<table xsi:noNamespaceSchemaLocation="table.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:for-each select="table/body/line">
<row>
</row>
</xsl:for-each>
</table>
</xsl:template>
错误消息说行元素应在 table 之后。
详细信息(已翻译):元素 <xsl:for-each>
不是元素 <table>
.
的 {anonymous} 类型
可以通过删除对 xsd 的引用或删除 for-each 语句来解决该问题。
但是,我不知道出了什么问题。据我了解,for-each-loop 应该只是在第一个 xml.
中为每一行重复 <row>
标记
这里是target的xsd的一部分。
<xs:element name="table">
<xs:complexType>
<xs:sequence>
<xs:element ref="row" maxOccurs="unbounded"/>
<xs:element ref="Metadata" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
我怀疑 Altova 正在使用属性 xsi:noNamespaceSchemaLocation="table.xsd"
的存在作为表示 "please validate this element against the schema in table.xsd" 的信号;这不是您想要的,因为它当然对该模式无效,因为它包含创建所需元素的 XSLT 指令,而不是包含所需元素本身。
要解决此问题,请尝试使用 xsl:attribute:
生成属性
<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:attribute name="xsi:noNamespaceSchemaLocation">table.xsd</xsl:attribute>
<xsl:for-each select="table/body/line">
<row/>
</xsl:for-each>
</table>
由于我是 xslt/xsd-programming 的初学者,我正在使用 XMLSpy 创建一个 xml2xml 转换。对于两个 xml,我都有一个 xsd。不幸的是,以下代码片段无效。
<xsl:template match="/">
<table xsi:noNamespaceSchemaLocation="table.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:for-each select="table/body/line">
<row>
</row>
</xsl:for-each>
</table>
</xsl:template>
错误消息说行元素应在 table 之后。
详细信息(已翻译):元素 <xsl:for-each>
不是元素 <table>
.
可以通过删除对 xsd 的引用或删除 for-each 语句来解决该问题。
但是,我不知道出了什么问题。据我了解,for-each-loop 应该只是在第一个 xml.
中为每一行重复 <row>
标记
这里是target的xsd的一部分。
<xs:element name="table">
<xs:complexType>
<xs:sequence>
<xs:element ref="row" maxOccurs="unbounded"/>
<xs:element ref="Metadata" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
我怀疑 Altova 正在使用属性 xsi:noNamespaceSchemaLocation="table.xsd"
的存在作为表示 "please validate this element against the schema in table.xsd" 的信号;这不是您想要的,因为它当然对该模式无效,因为它包含创建所需元素的 XSLT 指令,而不是包含所需元素本身。
要解决此问题,请尝试使用 xsl:attribute:
生成属性 <table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:attribute name="xsi:noNamespaceSchemaLocation">table.xsd</xsl:attribute>
<xsl:for-each select="table/body/line">
<row/>
</xsl:for-each>
</table>