我是XML和XSLT的新手,我正在尝试在ARXML中转换XML。到目前为止,它按我的意愿工作,但我无法创建根元素。
它应该是这样的:
<AUTOSAR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://autosar.org/schema/r4.0" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-2-1.xsd">
<AR-PACKAGES>
在@Martin Honnen和@JLRishe的帮助下,我的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:UML="omg.org/UML1.3" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://autosar.org/schema/r4.0" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-2-1.xsd"
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<AUTOSAR>
<AR-PACKAGES>
<xsl:element name="AR-PACKAGE">
</xsl:element>
</AR-PACKAGES>
</AUTOSAR>
所以我的结果是:
<?xml version="1.0" encoding="utf-8"?>
<AUTOSAR xmlns="http://autosar.org/schema/r4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:UML="omg.org/UML1.3" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<AR-PACKAGES>
<AR-PACKAGE>
</AR-PACKAGE>
</AR-PACKAGES>
所以这里的问题是,我不想要xmlns:UML="omg.org/UML1.3"
,但我想要xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-2-1.xsd"
作为属性。你知道怎么改变吗?
答案 0 :(得分:0)
只需在XSLT中使用文字元素即可。这将保留名称空间声明:
<AUTOSAR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://autosar.org/schema/r4.0"
xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-2-1.xsd">
<AR-PACKAGES>
答案 1 :(得分:0)
在大多数情况下,最简单的方法是将名称空间声明放在样式表的根元素上,然后对要创建的元素使用文字结果元素:
<xsl:stylesheet
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:UML="omg.org/UML1.3"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://autosar.org/schema/r4.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" exclude-result-prefixes="UML">
<xsl:template match="/">
<AUTOSAR xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-2-1.xsd">
<AR-PACKAGES>
...
</AR-PACKAGES>
</AUTOSAR>
</xsl:template>
如果需要在结果中声明不需要的命名空间,请使用exclude-result-prefixes
。