XML数据转换错误

时间:2014-04-09 00:46:30

标签: xml xslt transformation

我正在研究复杂的xml数据,我想根据自己的结构改变这个xml。

示例xml和xsl代码如下。如果我删除了这个xmlns="http://www.xasdasdasdasd.com/"部分,那就可以了。

- XML

<export xmlns="http://www.xasdasdasdasd.com/">
<extract date="2007-12-05">
    <counters>
        <counter category="dispatcher" name="server1">
            <runtime>6</runtime>
            <queue>3</queue>
            <maxrequest>8</maxrequest>
            <color>blue</color>
            <host>
                <name>svo2555</name>
                <path>\\dispatcher</path>
                <lastaccessed>2007-02-03</lastaccessed>
            </host>
        </counter>
        <counter category="gateway" name="server1">
            <runtime>1</runtime>
            <queue>10</queue>
            <maxrequest>10</maxrequest>
            <color>purple</color>
            <host>
                <name>svo2555</name>
                <path>\\gateway</path>
                <lastaccessed>2007-02-03</lastaccessed>
            </host>
        </counter>
    </counters>
</extract>
</export>

---- XSL

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="//export">
    <xsl:variable name="extractDate" select="//extract/@date" />
    <counters>
    <xsl:for-each select="//counters/counter">
        <counter>
            <extractDate><xsl:value-of select="$extractDate"/></extractDate>
            <category><xsl:value-of select="@category"/></category>
            <name><xsl:value-of select="@name"/></name>
            <runtime><xsl:value-of select="runtime"/></runtime>
            <queue><xsl:value-of select="queue"/></queue>
            <maxrequest><xsl:value-of select="maxrequest"/></maxrequest>
            <color><xsl:value-of select="color"/></color>
            <hostName><xsl:value-of select="host/name"/></hostName>
            <path><xsl:value-of select="host/path"/></path>
            <lastaccessed><xsl:value-of select="host/lastaccessed"/></lastaccessed>
        </counter>
    </xsl:for-each>
    </counters>
</xsl:template>
</xsl:stylesheet

1 个答案:

答案 0 :(得分:0)

如您所发现的那样,将XML放入命名空间会改变所有内容。搜索“XSLT默认命名空间”,您将找到669个问题的答案。