XML标签名称中的空格

苏汉·莎(Soham Shah)

我的XML是这样的:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Rowsets CachedTime="" DateCreated="2013-07-30T00:13:32" EndDate="2013-07-30T00:13:29" StartDate="2013-07-29T23:13:29" Version="12.2.4 Build(92)">
    <Rowset>
        <Columns>
            <Column Description="Name" MaxRange="1" MinRange="0" Name="Name" SQLDataType="-9" SourceColumn="Name"/>
            <Column Description="Value" MaxRange="1" MinRange="0" Name="Value" SQLDataType="-9" SourceColumn="Value"/>
            <Column Description="Min" MaxRange="1" MinRange="0" Name="Min" SQLDataType="2" SourceColumn="Min"/>
            <Column Description="Max" MaxRange="1" MinRange="0" Name="Max" SQLDataType="2" SourceColumn="Max"/>
            <Column Description="ObjectDisplay" MaxRange="1" MinRange="0" Name="ObjectDisplay" SQLDataType="12" SourceColumn="ObjectDisplay"/>
            <Column Description="Datatype" MaxRange="1" MinRange="0" Name="Datatype" SQLDataType="-9" SourceColumn="Datatype"/>
        </Columns>
        <Row>
            <Name>Tank</Name>
            <Value>T111</Value>
            <Min>1</Min>
            <Max>20</Max>
            <ObjectDisplay>Enabled</ObjectDisplay>
            <Datatype>String</Datatype>
        </Row>
        <Row>
            <Name>Material</Name>
            <Value>111-Bulk</Value>
            <Min>7</Min>
            <Max>20</Max>
            <ObjectDisplay>Enabled</ObjectDisplay>
            <Datatype>String</Datatype>
        </Row>
        <Row>
            <Name>Batch</Name>
            <Value>1111111</Value>
            <Min>7</Min>
            <Max>20</Max>
            <ObjectDisplay>Enabled</ObjectDisplay>
            <Datatype>String</Datatype>
        </Row>
    </Rowset>
    <Rowset>
        <Columns>
            <Column Description="Name" MaxRange="1" MinRange="0" Name="Name" SQLDataType="-9" SourceColumn="Name"/>
            <Column Description="Value" MaxRange="1" MinRange="0" Name="Value" SQLDataType="-9" SourceColumn="Value"/>
            <Column Description="Min" MaxRange="1" MinRange="0" Name="Min" SQLDataType="2" SourceColumn="Min"/>
            <Column Description="Max" MaxRange="1" MinRange="0" Name="Max" SQLDataType="2" SourceColumn="Max"/>
            <Column Description="ObjectDisplay" MaxRange="1" MinRange="0" Name="ObjectDisplay" SQLDataType="12" SourceColumn="ObjectDisplay"/>
            <Column Description="Datatype" MaxRange="1" MinRange="0" Name="Datatype" SQLDataType="-9" SourceColumn="Datatype"/>
        </Columns>
        <Row>
            <Name>Tank</Name>
            <Value>T222</Value>
            <Min>1</Min>
            <Max>20</Max>
            <ObjectDisplay>Enabled</ObjectDisplay>
            <Datatype>String</Datatype>
        </Row>
        <Row>
            <Name>Material</Name>
            <Value>222-Bulk</Value>
            <Min>7</Min>
            <Max>20</Max>
            <ObjectDisplay>Enabled</ObjectDisplay>
            <Datatype>String</Datatype>
        </Row>
        <Row>
            <Name>Batch</Name>
            <Value>2222222</Value>
            <Min>7</Min>
            <Max>20</Max>
            <ObjectDisplay>Enabled</ObjectDisplay>
            <Datatype>String</Datatype>
        </Row>
    </Rowset>
  </Rowsets>

我使用以下XSLT来转换上述XML:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output indent="yes"/>
  <!--  <xsl:strip-space elements="*"/>-->

    <xsl:template match="/*">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <Rowset>
                <Columns>
                    <xsl:apply-templates mode="cols" select="Rowset[1]/Row"/>
                </Columns>
                <xsl:apply-templates select="Rowset"/>
            </Rowset>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Row" mode="cols">
        <Column Description="" MaxRange="1" MinRange="0" Name="{Name}" SQLDataType="1" SourceColumn="{Name}"/>
    </xsl:template>

    <xsl:template match="Rowset">
        <Row>
            <xsl:apply-templates select="Row/Name"/>            
        </Row>
    </xsl:template>

    <xsl:template match="Name">
        <xsl:element name="{.}">
            <xsl:value-of select="../Value"/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

我得到正确的输出如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Rowsets CachedTime="" DateCreated="2013-07-30T00:13:32" EndDate="2013-07-30T00:13:29" StartDate="2013-07-29T23:13:29" Version="12.2.4 Build(92)">
<Rowset>
<Columns>
<Column Description="" MaxRange="1" MinRange="0" Name="Tank" SQLDataType="1" SourceColumn="Tank"/>
<Column Description="" MaxRange="1" MinRange="0" Name="Material" SQLDataType="1" SourceColumn="Material"/>
<Column Description="" MaxRange="1" MinRange="0" Name="Batch" SQLDataType="1" SourceColumn="Batch"/>
</Columns>
<Row>
<Tank>T111</Tank>
<Material>111-Bulk</Material>
<Batch>1111111</Batch>
</Row>
<Row>
<Tank>T222</Tank>
<Material>222-Bulk</Material>
<Batch>2222222</Batch>
</Row>
</Rowset>
</Rowsets>

但是现在当我遵循XML并运行XSLT时,出现以下错误:

XML:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Rowsets CachedTime="" DateCreated="2013-07-30T00:13:32" EndDate="2013-07-30T00:13:29" StartDate="2013-07-29T23:13:29" Version="12.2.4 Build(92)">
    <Rowset>
        <Columns>
            <Column Description="Name" MaxRange="1" MinRange="0" Name="Name" SQLDataType="-9" SourceColumn="Name"/>
            <Column Description="Value" MaxRange="1" MinRange="0" Name="Value" SQLDataType="-9" SourceColumn="Value"/>
            <Column Description="Min" MaxRange="1" MinRange="0" Name="Min" SQLDataType="2" SourceColumn="Min"/>
            <Column Description="Max" MaxRange="1" MinRange="0" Name="Max" SQLDataType="2" SourceColumn="Max"/>
            <Column Description="ObjectDisplay" MaxRange="1" MinRange="0" Name="ObjectDisplay" SQLDataType="12" SourceColumn="ObjectDisplay"/>
            <Column Description="Datatype" MaxRange="1" MinRange="0" Name="Datatype" SQLDataType="-9" SourceColumn="Datatype"/>
        </Columns>
        <Row>
            <Name>Tank Tag</Name>
            <Value>T111</Value>
            <Min>1</Min>
            <Max>20</Max>
            <ObjectDisplay>Enabled</ObjectDisplay>
            <Datatype>String</Datatype>
        </Row>
        <Row>
            <Name>Material</Name>
            <Value>111-Bulk</Value>
            <Min>7</Min>
            <Max>20</Max>
            <ObjectDisplay>Enabled</ObjectDisplay>
            <Datatype>String</Datatype>
        </Row>
        <Row>
            <Name>Batch</Name>
            <Value>1111111</Value>
            <Min>7</Min>
            <Max>20</Max>
            <ObjectDisplay>Enabled</ObjectDisplay>
            <Datatype>String</Datatype>
        </Row>
    </Rowset>
    <Rowset>
        <Columns>
            <Column Description="Name" MaxRange="1" MinRange="0" Name="Name" SQLDataType="-9" SourceColumn="Name"/>
            <Column Description="Value" MaxRange="1" MinRange="0" Name="Value" SQLDataType="-9" SourceColumn="Value"/>
            <Column Description="Min" MaxRange="1" MinRange="0" Name="Min" SQLDataType="2" SourceColumn="Min"/>
            <Column Description="Max" MaxRange="1" MinRange="0" Name="Max" SQLDataType="2" SourceColumn="Max"/>
            <Column Description="ObjectDisplay" MaxRange="1" MinRange="0" Name="ObjectDisplay" SQLDataType="12" SourceColumn="ObjectDisplay"/>
            <Column Description="Datatype" MaxRange="1" MinRange="0" Name="Datatype" SQLDataType="-9" SourceColumn="Datatype"/>
        </Columns>
        <Row>
            <Name>Tank Tag</Name>
            <Value>T222</Value>
            <Min>1</Min>
            <Max>20</Max>
            <ObjectDisplay>Enabled</ObjectDisplay>
            <Datatype>String</Datatype>
        </Row>
        <Row>
            <Name>Material</Name>
            <Value>222-Bulk</Value>
            <Min>7</Min>
            <Max>20</Max>
            <ObjectDisplay>Enabled</ObjectDisplay>
            <Datatype>String</Datatype>
        </Row>
        <Row>
            <Name>Batch</Name>
            <Value>2222222</Value>
            <Min>7</Min>
            <Max>20</Max>
            <ObjectDisplay>Enabled</ObjectDisplay>
            <Datatype>String</Datatype>
        </Row>
    </Rowset>
  </Rowsets>

错误:

[ERROR] [XSLSingleTableTransformation]XSLTransform error: java.lang.RuntimeException: An attribute whose value must be a QName had the value 'Tank Tag'

如何清除此错误?

如果此错误是由于容器和标签之间的空格所致,则1)我可以获取带空格的XML标签名称吗?2)如果没有,我该如何删除该空格而改为“-”

michael.hor257k

您只需要更改以下内容:

<xsl:template match="Name">
    <xsl:element name="{.}">

到这个:

<xsl:template match="Name">
    <xsl:element name="{translate(., ' ' , '_')}">

这会将名称中的空格转换为下划线。请注意,对于可以用作元素名称的内容还有其他限制,因此可能并不以此为限。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在XML中查找标签名称[PHP]

来自分类Dev

从XML获取标签名称

来自分类Dev

使用Tcl脚本更改XML中的标签名称

来自分类Dev

获取xml文件的标签名称

来自分类Dev

使用相同标签名称创建Xml

来自分类Dev

通过标签名称获取xml元素

来自分类Dev

如何从输入XML获取标签值,其中标签名称存储在变量中

来自分类Dev

如何从输入XML获取标签值,其中标签名称存储在变量中

来自分类Dev

xmllint根据xml文档中的标签名称搜索标签的值

来自分类Dev

根据标签xml bash中的off属性搜索并返回标签名称

来自分类Dev

何时在标签名称和类或ID之间放置空格

来自分类Dev

XML更改带有标签内容的标签名称

来自分类Dev

获取OpenERP中字段的标签名称

来自分类Dev

SQLAlchemy从列中获取标签名称

来自分类Dev

标签名称中的变量 - Swift

来自分类Dev

更改 ggsurvplot 中的标签名称

来自分类Dev

获取具有“名称”属性的XML元素的标签名称

来自分类Dev

我如何在Spring Batch XML中更改标签名称

来自分类Dev

无论使用C#在XML文件中的级别如何,都获取具有相同标签名称的所有标签

来自分类Dev

Rails 5 标签助手,标签名称在变量中

来自分类Dev

在数组中返回与标签名称查询匹配的 html 标签名称

来自分类Dev

使用XmlSlurper或XmlParser更改xml元素/标签名称

来自分类Dev

Scala XML根据标签名称获取值

来自分类Dev

用python替换xml或html上的标签名称

来自分类Dev

在XML文件标签中添加空格

来自分类Dev

使用元素名称中的空格解析XML

来自分类Dev

从python中的标签名称中收集数据

来自分类Dev

从python中的标签名称中收集数据

来自分类Dev

查找包含特定标签名称的xml文件,并在标签名称之间打印单词

Related 相关文章

热门标签

归档