有没有可以格式化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中,第一个元素在一行中具有属性。有什么帮助吗?谢谢。
答案 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
一起指定。