我正在使用XSLT1.0(因为处理软件不支持2.0),我一直在寻找一种方法,使输出xml上的所有名称空间定义都放在根节点上。有人知道怎么做吗?
下面是一个小例子,说明我正在做什么,我得到了什么,我追求的是什么:
<document Version="1.4">
<Series>A</Series>
<Folio>321</Folio>
<Date>2017-05-05T01:00:00</Date>
<Complement>
<Other>
<Version>4.2</Version>
<Type>K</Type>
<PaymentDate>2016-12-13</PaymentDate>
</Other>
</Complement>
</document>
我得XSLT:
<xsl:stylesheet extension-element-prefixes="xsi" version="1.0" xmlns:A="http://example.com/A" xmlns:C="http://example.com/C" xmlns:local="urn:local" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:B="http://example.com/B" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsi:schemaLocation="http://example.com/A http://example.com/A/A.xsd">
<xsl:output encoding="UTF-8" indent="yes" method="xml" version="1.0" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:element name="A:Document">
<xsl:attribute name="Version">
<xsl:text>9.1</xsl:text>
</xsl:attribute>
<xsl:if test="/document/Series/node() and /document/Series != ''">
<xsl:attribute name="Series">
<xsl:value-of select="/document/Series"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="/document/Folio/node() and /document/Folio != ''">
<xsl:attribute name="Folio">
<xsl:value-of select="/document/Folio"/>
</xsl:attribute>
</xsl:if>
<xsl:attribute name="Date">
<xsl:value-of select="/document/Date"/>
</xsl:attribute>
<xsl:if test="/document/Complement/Other/node() or /document/Complement/Another/node()">
<xsl:element name="A:Complement">
<xsl:if test="/document/Complement/Other/node()">
<xsl:element name="B:Payment">
<xsl:call-template name="B:Payment">
<xsl:with-param name="Node" select="/document/Complement/Other"/>
</xsl:call-template>
</xsl:element>
</xsl:if>
</xsl:element>
</xsl:if>
</xsl:element>
</xsl:template>
<!--- COMPLEMENT-->
<xsl:template name="B:Payment">
<xsl:param name="Node"/>
<xsl:attribute name="Version">
<xsl:value-of select="$Node/Version"/>
</xsl:attribute>
<xsl:attribute name="Type">
<xsl:value-of select="$Node/Type"/>
</xsl:attribute>
<xsl:attribute name="PaymentDate">
<xsl:value-of select="$Node/PaymentDate"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
输出:
<A:Document Version="9.1" Series="A" Folio="321" Date="2017-05-05T01:00:00" xmlns:A="http://example.com/A">
<A:Complement>
<B:Payment Version="4.2" Type="K" PaymentDate="2016-12-13" xmlns:B="http://example.com/B" />
</A:Complement>
</A:Document>
我需要的:
<A:Document Version="9.1" Series="A" Folio="321" Date="2017-05-05T01:00:00" xmlns:A="http://example.com/A" xmlns:B="http://example.com/B">
<A:Complement>
<B:Payment Version="4.2" Type="K" PaymentDate="2016-12-13" />
</A:Complement>
</A:Document>
我是一个XSLT新手,因此我将非常感谢任何有关此方面的帮助(或一些我可以学习如何这样做的文献的指导)
我建议您将文字结果元素与IE一起使用。
<xsl:template match="/">
<A:Document>
那么您只需要exclude-result-prefixes=“xsi C local msxsl”
,即。
<xsl:stylesheet exclude-result-prefixes="xsi C local msxsl" version="1.0" xmlns:A="http://example.com/A" xmlns:C="http://example.com/C" xmlns:local="urn:local" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:B="http://example.com/B" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsi:schemaLocation="http://example.com/A http://example.com/A/A.xsd">
这样XSLT处理器就会输出
<A:Document xmlns:A="http://example.com/A" xmlns:B="http://example.com/B" Version="9.1" Series="A" Folio="321" Date="2017-05-05T01:00:00">
关于资源和教程,有一本书可以在网上免费下载,网址是https://cranesoftwrights.github.io/books/ptux/。
我有困难建立一个有3个类的结构。我不确定包含/转发声明。 下面的代码一直在编译,直到我在inclino.h中添加名称空间和枚举。我从Inclinomeasure.h收到“Inclino尚未声明”。 倾斜度。h 倾斜度 倾角读数.h 结构正确吗?如何访问其他类中的枚举? 提前道谢。 编辑:我修复了名称空间的问题,把它放在一个新的文件,包括由3类。但我似乎误用了include/forward声明。
我试图在头文件中使用前向声明来减少#includes used,从而减少用户包含我的头文件时的依赖关系。 但是,我无法在使用名称空间的地方转发decalre。参见下面的示例。 这里是我非常做作的工作代码使用下面的答案。
问题内容: 如何在JavaScript中创建名称空间,以使我的对象和函数不会被其他同名对象和函数覆盖?我使用了以下内容: 有没有更优雅或更简洁的方法? 问题答案: 我喜欢这个:
我正在创建一个基于以下代码的动态sitemap.xml 这是可行的,但Google不高兴“urlset”节点中没有Namespace声明。Google错误:“您的Sitemap或Sitemap索引文件未声明预期的命名空间:http://www.sitemaps.org/schemas/sitemap/0.9" 如果我将代码更改为: 它无法生成xml文件并引用以下内容: 在测试中,我发现节点需要一个
如何在命名空间中转发声明类。例如,下面是一个库的头文件,用户不需要知道私有的myPtr,所以当包含在头文件下面时,不需要包含boost头文件。那么我如何向前声明boost::shared_ptr以启用用户代码编译呢? MyClass.h
这是一个非常基本的问题,但实际上我从来没有自己定义过名称空间。我正在尝试将我的基于Qt的库中的类分组在各种名称空间中(并且还允许更容易的扩展而不发生名称冲突)。例如,主类(也表示库)属于顶级命名空间: 这个使用了一组其他名称空间和类,这些名称空间和类是在的头文件中定义的,这些头文件包含在的头文件中: 其中Manager.h包含 和configurator.h包含 类的内容在这里并不重要。 在编译时