如何将XSLT中的文本(元素属性)格式化为一行

时间:2019-03-24 08:33:33

标签: xml xslt xslt-1.0 xslt-2.0 saxon

有没有可以格式化xslt文件的功能。我认为他一开始可能会在某处使用。我怎么了?

我创建了基本的xslt:

enumerate

在第一个模板中,一切都很好,element的属性在一行中。在每个下一个元素中,都有自己的行中的属性。我不知道为什么。 这是XML输出:

 ...<xsl:template name="model"  match="uml:Model">
        <xsl:element name="uml:Model">
            <xsl:attribute name="xmi:type">
              <xsl:value-of select="@xmi:type"/>
            </xsl:attribute>
            <xsl:attribute name="name">
              <xsl:value-of select="@name" />
            </xsl:attribute>
            <xsl:attribute name="visibility">
              <xsl:value-of select="@visibility" />
            </xsl:attribute>
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>

    <xsl:template match="packagedElement[@xmi:type='uml:Package']">
        <xsl:element name="packagedElement">
            <xsl:attribute name="xmi:type">uml:Package</xsl:attribute>
            <xsl:attribute name="xmi:id">
                <xsl:value-of select="@xmi:id"></xsl:value-of>
            </xsl:attribute>
            <xsl:attribute name="name">sequenceD</xsl:attribute>
            <xsl:attribute name="visibility">public</xsl:attribute> 
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>...

这就是我所期望的:

<uml:Model xmi:type="uml:Model" name="EA_Model" visibility="public">
      <packagedElement xmi:type="uml:Package"
                       xmi:id="EAPK_9E00FA41_6F28_4e47_9AE6_2A04EE92CDBB"
                       name="sequenceD"
                       visibility="public"/>
</uml:Model>

我也尝试将自己的文本添加到第二个模板中的第一个模板,但结果相同。在xml中,第一个元素在一行中具有属性。有什么帮助吗?谢谢。

1 个答案:

答案 0 :(得分:0)

如果您使用的是Saxon,并指定indent =“ yes”,则如果行长超出某些阈值,则将属性拆分为多行以提高可读性:indent =“ yes”的既定目的是为了使其人们更容易读取输出,并且通常认为需要水平滚动的长行会导致可读性差。

Saxon(PE和更高版本)允许您使用import React, { Fragment } from "react"; import ReactDOM from "react-dom"; import "antd/dist/antd.css"; import "./index.css"; import { Table, Input, Button, Icon } from "antd"; import Highlighter from "react-highlight-words"; class App extends React.Component { state = { searchText: "", key: 0, data: [ { key: "1", name: "John Brown" }, { key: "2", name: "Joe Black" } ] }; getColumnSearchProps = dataIndex => ({ filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => ( <div style={{ padding: 8 }}> <Input ref={node => { this.searchInput = node; }} placeholder={`Search ${dataIndex}`} value={selectedKeys[0]} onChange={e => setSelectedKeys(e.target.value ? [e.target.value] : []) } onPressEnter={() => this.handleSearch(selectedKeys, confirm)} style={{ width: 188, marginBottom: 8, display: "block" }} /> <Button type="primary" onClick={() => this.handleSearch(selectedKeys, confirm)} icon="search" size="small" style={{ width: 90, marginRight: 8 }} > Search </Button> <Button onClick={() => this.handleReset(clearFilters)} size="small" style={{ width: 90 }} > Reset </Button> </div> ), filterIcon: filtered => ( <Icon type="search" style={{ color: filtered ? "#1890ff" : undefined }} /> ), onFilter: (value, record) => record[dataIndex] .toString() .toLowerCase() .includes(value.toLowerCase()), onFilterDropdownVisibleChange: visible => { if (visible) { setTimeout(() => this.searchInput.select()); } }, render: text => ( <Highlighter highlightStyle={{ backgroundColor: "#ffc069", padding: 0 }} searchWords={[this.state.searchText]} autoEscape textToHighlight={text.toString()} /> ) }); handleSearch = (selectedKeys, confirm) => { confirm(); this.setState({ searchText: selectedKeys[0] }); }; handleReset = clearFilters => { clearFilters(); this.setState({ searchText: "" }); }; reset = () => { this.setState({ key: this.state.key + 1, searchText: '' }); }; render() { const columns = [ { title: "Name", dataIndex: "name", key: "name", width: "30%", ...this.getColumnSearchProps("name") } ]; return ( <div> <button onClick={this.reset}>Reload and Reset Search Filter</button> <Table key={this.state.key} columns={columns} dataSource={this.state.data} /> </div> ); } } ReactDOM.render(<App />, document.getElementById("container")) 序列化属性来控制最大行长,可以在saxon:line-length上与xsl:output一起指定。