如何在XSLT中创建具有多个前缀:名称空间属性的根元素

时间:2015-03-18 11:25:09

标签: xml xslt

我是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" 作为属性。你知道怎么改变吗?

2 个答案:

答案 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