English 中文(简体)
• 如何运用包括使用tDOM的XML doc空间的XSLT转变?
原标题:How to apply an XSLT transformation that includes spaces to an XML doc using tDOM?
  • 时间:2011-10-26 20:37:34
  •  标签:
  • xslt
  • tcl
  • tdom

我有以下表格:

<definitions devices="myDevice">
    <reg offset="0x0000" mnem="someRegister">
        <field mnem="someField" msb="31" lsb="24 />
        ...
    </reg>
    ...
</definitions>

我想,XML是明确参照和使用XSLT,将XSLT转变为文件超文本,h 用于建筑(也可能是其他形式的)。

超文本有效,每个登记册编制一个表格,每个领域浏览:

... (header boilerplate removed)
<xsl:for-each select="definitions/reg">
  <table>
    <tr>
      <th><xsl:value-of select="@offset"/></th>
      <th><xsl:value-of select="@mnem"/></th>
    </tr>
    <xsl:for-each select="field">
        <tr>
            <td><xsl:value-of select="@msb"/>..<xsl:value-of select="@lsb"/></td>
            <td><xsl:value-of select="@mnem"/></td>
        </tr>
    </xsl:for-each>
  </table>
</xsl:for-each>

转而去的是.。 I m完全没有产生产出所需的空间:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="definitions/reg">
#define <xsl:value-of select="translate(@mnem, abcdefghijklmnopqrstuvwxyz , ABCDEFGHIJKLMNOPQRSTUVWXYZ )"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="@offset"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

我希望能产生产出:

#define SOMEREGISTER 0x0000

但我实际上得到:

#define SOMEREGISTER0x0000

我不理解,为什么我是在“ #”之后获得的空间,而不是经过变幻莫测之后的空间。 我尝试了一种简单的解决办法,它只是一个直线空间,结果相同。

我对这一点太新了,不知道Im a是否做了错误或(b)在tDOM上找到了一个限制。

最佳回答

测试:

# I could have read these from a file I suppose...
set in {<definitions devices="myDevice">
<reg offset="0x0000" mnem="someRegister">
<field mnem="someField" msb="31" lsb="24" />
</reg>
</definitions>}
set ss {<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="definitions/reg">
<xsl:text>#define </xsl:text>
<xsl:value-of select="translate(@mnem, abcdefghijklmnopqrstuvwxyz , ABCDEFGHIJKLMNOPQRSTUVWXYZ )"/>
<xsl:text xml:space="preserve"> </xsl:text>
<xsl:value-of select="@offset"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>}

# Interesting code starts here
package require tdom
set indoc [dom parse $in]
set xslt [dom parse -keepEmpties $ss]
set outdoc [$indoc xslt $xslt]
puts [$outdoc asText]

我发现这项工作。 问题是,tDOM parsert处理xml:space属性正确;没有魔法-keepEmpties ,all。 空洞str被 stripped弃,导致采用错误的SLT风格。 但“ with. 备选办法看来是正确的。

请注意,SLT发动机本身正在做正确的事。 它是XML教区/DOM建筑商。 (我想这只是一 b;我看着哪里报告。)

问题回答

Per: http://www.ibm.com/developerworks/xml/library/x-tipwhitesp/index.html

采用保全空间指令:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="definitions/reg">
    <xsl:text xml:space="preserve">#define </xsl:text>
    <xsl:value-of select="translate(@mnem, abcdefghijklmnopqrstuvwxyz , ABCDEFGHIJKLMNOPQRSTUVWXYZ )"/>
    <xsl:text xml:space="preserve"> </xsl:text>
    <xsl:value-of select="@offset"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

你没有在你的第二个风格表格中具体规定的产出方法,因此,缺省是XML。 我建议你使用输出方法“文本”,然后使用<代码><xsl:text>任何字面产出的内容。 举例说:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:template match="/">
        <xsl:for-each select="definitions/reg"><xsl:text>#define </xsl:text><xsl:value-of select="translate(@mnem, abcdefghijklmnopqrstuvwxyz , ABCDEFGHIJKLMNOPQRSTUVWXYZ )"/><xsl:text> </xsl:text><xsl:value-of select="@offset"/><xsl:text>&#10;</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

EDIT:通过这一方式,&#10; at the end is a nature Code. 这只是ASCII代码对线饲料的粗略价值。 这使你们能够开始进入下一个区。 如果您需要Windows/DOS公约(车龄回归+线饲料),则使用<代码>&#13;&#10;。





相关问题
When test hanging in an infinite loop

I m tokenising a string with XSLT 1.0 and trying to prevent empty strings from being recognised as tokens. Here s the entire function, based on XSLT Cookbook: <xsl:template name="tokenize"> ...

quick xslt for-each question

Let s say I have an XML document that has this: <keywords> <keyword>test</keyword> <keyword>test2</keyword> <keyword>test3</keyword> <keyword>test4</...

XSLT Transform XML with Namespaces

I m trying to transform some XML into HTML using XSLT. Problem: I can t get it to work. Can someone tell me what I m doing wrong? XML: <ArrayOfBrokerage xmlns:i="http://www.w3.org/2001/...

XSLT output to HTML

In my XSLT file, I have the following: <input type="button" value= <xsl:value-of select="name">> It s an error as it violates XML rule. What I actually want is having a value from an ...

Mangling IDs and References to IDs in XML

I m trying to compose xml elements into each other, and the problem I am having is when there s the same IDs. Basically what I need to do is mangle all the IDs in an xml file, as well as the ...

Sharepoint 2007 Data view Webpart custom parameters

I m sort of new to the custom parameters that can be setup on a DataView Webpart. There are 6 options: - None - Control - Cookie - Form - QueryString - Server Variable I think that None, Cookie and ...

热门标签