gpt4 book ai didi

xml - XSLT 转换生成空命名空间

转载 作者:行者123 更新时间:2023-12-04 16:58:11 24 4
gpt4 key购买 nike

我有一个必须使用 XSLT 转换的 XML 文件,我正在向子树添加一个节点。
输入文件如下:

 <?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Context>
<ContextExtra>
<ns3:timestampList xmlns:ns3="http://www.mydomain.com/myAdapter/basicMessage/1.0"
xmlns:ns2="http://www.mydomain.com/myAdapter/tbMessage/1.0"
xmlns="http://www.mydomain.com/myAdapter/timestamp/1.0"
xmlns:ns10="http://www.mydomain.com/myAdapter/coMessage/1.0"
xmlns:ns11="http://www.mydomain.com/myAdapter/lolMessage/1.0"
xmlns:ns12="http://www.mydomain.com/myAdapter/tcMessage/1.0"
xmlns:ns13="http://www.mydomain.com/myAdapter/bMessage/1.0"
xmlns:ns4="http://www.mydomain.com/myAdapter/tiMessage/1.0"
xmlns:ns5="http://www.myDomain.com/myAdapter/oriMessage/1.0"
xmlns:ns6="http://www.myDomain.com/myAdapter/eiMessage/1.0"
xmlns:ns7="http://www.myDomain.com/myAdapter/fplscMessage/1.0"
xmlns:ns8="http://www.myDomain.com/myAdapter/psMessage/1.0"
xmlns:ns9="http://www.myDomain.com/myAdapter/stMessage/1.0">
<timestampInfo>
<timestampID>START</timestampID>
<timestamp>2012-02-25T00:30:18.705+01:00</timestamp>
<description xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</timestampInfo>
<timestampInfo>
<timestampID>END</timestampID>
<timestamp>2012-02-25T00:30:23.675+01:00</timestamp>
<description xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</timestampInfo>
</ns3:timestampList>

</ContextExtra>
</Context>

转换看起来像这样
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:output method="xml" indent="yes" />    

<xsl:param name="newTimeStamp">
<timestampInfo>
<timestampID>
<xsl:text>TEST TEST</xsl:text>
</timestampID>
<timestamp>
<xsl:text>2012-02-25T00:30:23.654+01:00</xsl:text>
</timestamp>
<description>
<xsl:text>this is a test</xsl:text>
</description>
</timestampInfo>
</xsl:param>

<xsl:template match="//ts:timestampInfo[position()=last()]">
<xsl:call-template name="identity" />
<xsl:copy-of select="$newTimeStamp" />
</xsl:template>

<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>

结果如下:
<?xml version="1.0" encoding="UTF-8"?>
<Envelope>
<Context>
<ContextExtra>
<ns3:timestampList xmlns="http://www.myDomain.com/myAdapter/timestamp/1.0" xmlns:ns3="http://www.myDomain.com/myAdapter/basicMessage/1.0">
<timestampInfo>
<timestampID>MTA_START</timestampID>
<timestamp>2012-02-25T00:30:18.705+01:00</timestamp>
<description xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</timestampInfo>
<timestampInfo>
<timestampID>MTA_END</timestampID>
<timestamp>2012-02-25T00:30:23.675+01:00</timestamp>
<description xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</timestampInfo>
<timestampInfo xmlns="">
<timestampID>TEST TEST</timestampID>
<timestamp>2012-02-25T00:30:23.654+01:00</timestamp>
<description>This is a test</description>
</timestampInfo>
</ns3:timestampList>
</ContextExtra>
</Context>

如您所见 timestampInfo节点具有作为属性 xmlns="" .也就是说,它是一个生成的空命名空间。而不是 <timestampInfo xmlns="">我想要形式为 <timestampInfo> 的节点.输入文件具有这种格式,我无法控制它。

我怎么能做到这一点?

提前致谢

最佳答案

指定 timestampInfo 的命名空间您正在添加:

<xsl:param name="newTimeStamp"> 
<timestampInfo xmlns="http://www.myDomain.com/myAdapter/timestamp/1.0">
<timestampID>
<xsl:text>TEST TEST</xsl:text>
</timestampID>
<timestamp>
<xsl:text>2012-02-25T00:30:23.654+01:00</xsl:text>
</timestamp>
<description>
<xsl:text>this is a test</xsl:text>
</description>
</timestampInfo>
</xsl:param>

关于xml - XSLT 转换生成空命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9771106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com