C# <;br/>;xml/xsl中的标记
我通过从c#中的richtextbox获取数据来生成xml,并生成以下xml文件 xml文件C# <;br/>;xml/xsl中的标记,c#,xml,xslt,C#,Xml,Xslt,我通过从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 samp
<?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>
我想在资源管理器中以相同的格式(不同的行)显示这些数据。
我的代码如下所示
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();
}
使用(XmlWriter=XmlWriter.Create(“c:\\Task\\Task.xml”,设置))
{
//writer.WriteRaw(“”);
writer.WriteRaw(“”);
writer.writeStarteElement(“节点”);
作者。书面声明(“斯诺德”);
writer.WriteElementString(“Word”,Word);
writer.writeedelement();
writer.WriteEndDocument();
}
我应该在哪里使用标签。或者我应该如何以相同的格式显示数据。
感谢您的帮助我更喜欢使用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();
}
使用(XmlWriter=XmlWriter.Create(“c:\\Task\\Task.xml”,设置))
{
//writer.WriteRaw(“”);
writer.WriteRaw(“”);
writer.writeStarteElement(“节点”);
作者。书面声明(“斯诺德”);
作者:书面声明(“工作”);
作者:WriteCData(“文字”);
writer.writeedelement();
writer.writeedelement();
writer.writeedelement();
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();
}
stringwords=“这是我的\“节点\”&我喜欢它
test”;
使用(XmlTextWriter xtw=newxmltextwriter(@“c:\xmlTest.xml”,Encoding.Unicode))
{
writer.writeStarteElement(“节点”);
作者。书面声明(“斯诺德”);
writer.WriteElementString(“Word”,Word);
writer.writeedelement();
writer.writeedelement();
writer.WriteEndDocument();
}
如果您不想使用XmlTextWriter,您可以使用如果您想要一种非常粗糙的方法,只需将输出的文本包装在pre元素中即可
<td>
<pre><xsl:value-of select="Word"/></pre>
</td>
(顺便说一句,这可能只是您的问题中的一个输入错误,但是在XML中有一个word元素,但在XSLT中您要查找一个word元素。由于XML区分大小写,这两个元素不同)
编辑:如果您真的想用br元素替换换行符,那么要在XSLT中实现这一点,您需要一个递归模板。这里可能有很多关于StackOverflow的例子,但我选择了这一个
但是,这需要进行调整,因为当您要用新创建的元素替换文本时,它会用文本替换文本
试试这个XSLT
<Nodes><sNode>
<Word>this is a sample text
this is a sample text
this is a sample text
</Word>
</sNode>
</Nodes>
富文本框
资料
当应用于以下XML时
<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>
这是一个示例文本
这是一个示例文本
这是一个示例文本
以下是输出
富文本框
资料
这是一个示例文本
这是一个示例文本
这是一个示例文本
您知道这样一个事实:XML是一种纯文本格式,因此,解析器/显示程序通常以便于阅读的方式显示XML。编程告诉它“新线”(aka\n aka)是。。。奇怪,没有程序。当我将输入作为字符串STR=richTextBox1.Text.ToString()时;如果行在新行中,我指的是在单独的行中,它会为我提供\n输入。。。我将不同的行存储在xml的单个节点中。我应该用
替换\n吗?如果是,那么我已经尝试过了。它不起作用。有什么想法吗?在这个网站上,我尝试了(xml代码)这是作为测试输入提供的数据!xslt以------------------的形式提供,并以--------------------的形式找到html,您好,World!这是作为测试输入提供的数据-1:您不应该使用
newxmltextreader()
或newxmltextwriter()
。自.NET 2.0以来,它们一直被弃用。改为使用XmlReader.Create()
或XmlWriter.Create()
。我看不到您的答案有任何变化。只有您的代码没有编译。此外,OP在逃跑方面也没有问题。请仔细阅读这个问题(我知道它不是很清楚)。很抱歉造成混淆,我是一名新手@stackoverflow,我已经再次阅读,并再次更改了代码,可能代码无法编译,我只为hinti提供了。很抱歉,我也是一名新手。谢谢大家的关心。我将richtextbox控件中的输入作为----string STR=richTextBox1.Text.ToString();字符串字=STR.Replace(“\n”,“”);通过按enter键,提供的输入将以多行形式显示。我在我的应用程序中使用了explorer控件,以相同的格式显示用户输入的数据(仅新行,而不是其他格式,如粗体或颜色等),谢谢亲爱的tim您的评论(顺便说一句,这可能只是您的问题中的一个输入错误,但在XML中您有一个word元素,但在XSLT中您正在寻找一个word元素。由于XML区分大小写,这两个元素不同)还解决了一个大问题,这也是我的前辈们没有发现的…@user2787182我已经修改了我的问题,以展示如何用
替换换行符
<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>
<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>