我通过从c#中的richtextbox获取数据生成xml并生成以下xml文件
xml文件
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="task.xsl"?>
<Nodes><sNode><Word>this is a sample text this is a sample text this is a sample text</Word></sNode></Nodes>
“我为xml制作的xslt如下” xslt示例
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Rich Text Box</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Data</th>
</tr>
<xsl:for-each select="Nodes/sNode">
<tr>
<td><xsl:value-of select="word"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
示例输入数据(我在richtextbox中以相同的格式输入以下数据)
this is a sample text
this is a sample text
this is a sample text
我想以相同的格式(在不同的行中)在资源管理器中显示这些数据。 我的代码在
之下 using (XmlWriter writer = XmlWriter.Create("c:\\Task\\task.xml",settings))
{
//writer.WriteRaw("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
writer.WriteRaw("<?xml-stylesheet type=\"text/xsl\" href=\"task.xsl\"?>");
writer.WriteStartElement("Nodes");
writer.WriteStartElement("sNode");
writer.WriteElementString("Word", words);
writer.WriteEndElement();
writer.WriteEndDocument();
}
我应该在哪里使用<br/>
标签。或者我该怎么做才能以相同的格式显示数据。
感谢您的帮助
答案 0 :(得分:0)
我更喜欢使用se XmlTextWriter而不是使用XmlWriter,因为我不必担心转义任何东西,因为XmlTextWriter会转义所需的字符,但是这些类已被弃用, 另一种方法是明确使用CDATA
CDATA示例
using (XmlWriter writer = XmlWriter.Create("c:\\Task\\task.xml",settings))
{
//writer.WriteRaw("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
writer.WriteRaw("<?xml-stylesheet type=\"text/xsl\" href=\"task.xsl\"?>");
writer.WriteStartElement("Nodes");
writer.WriteStartElement("sNode");
writer.WriteStartElement("Work");
writer.WriteCData("words");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
}
XmlTextWriter的示例
string words = "<node>it's my \"node\" & i like it<node><br/>test";
using (XmlTextWriter xtw = new XmlTextWriter(@"c:\xmlTest.xml", Encoding.Unicode))
{
writer.WriteStartElement("Nodes");
writer.WriteStartElement("sNode");
writer.WriteElementString("Word", words);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
}
如果您不想使用XmlTextWriter,可以使用
答案 1 :(得分:0)
如果您想要一种非常粗略的方法,只需将输出的文本包装在 pre 元素中
<td>
<pre><xsl:value-of select="Word"/></pre>
</td>
(顺便说一句,这可能只是你问题中的一个错字,但在你的XML中你有一个 word 元素,但在XSLT中你正在寻找一个 Word 元素。由于XML区分大小写,因此不一样。)
编辑:如果你真的想用 br 元素替换换行符,那么要在XSLT中执行此操作,您将需要一个递归模板。 StackOverflow上可能有很多例子,但是我对这个例子充满了希望
xslt 1.0 string replace function
但是,如果要用新创建的元素替换文本,则需要进行调整,因为它会将文本替换为文本。
试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Rich Text Box</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Data</th>
</tr>
<xsl:for-each select="Nodes/sNode">
<tr>
<td>
<xsl:call-template name="replace-string-with-element">
<xsl:with-param name="text" select="Word"/>
<xsl:with-param name="replace" select="' '"/>
<xsl:with-param name="with" select="'br'"/>
</xsl:call-template>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
<xsl:template name="replace-string-with-element">
<xsl:param name="text"/>
<xsl:param name="replace"/>
<xsl:param name="with"/>
<xsl:choose>
<xsl:when test="contains($text,$replace)">
<xsl:value-of select="substring-before($text,$replace)"/>
<xsl:element name="{$with}"/>
<xsl:call-template name="replace-string-with-element">
<xsl:with-param name="text" select="substring-after($text,$replace)"/>
<xsl:with-param name="replace" select="$replace"/>
<xsl:with-param name="with" select="$with"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
应用于以下XML
<Nodes><sNode>
<Word>this is a sample text
this is a sample text
this is a sample text
</Word>
</sNode>
</Nodes>
以下是输出
<html>
<body>
<h2>Rich Text Box</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Data</th>
</tr>
<tr>
<td>this is a sample text <br> this is a sample text<br> this is a sample text<br> </td>
</tr>
</table>
</body>
</html>