C# <;br/>;xml/xsl中的标记

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

我通过从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>
我想在资源管理器中以相同的格式(不同的行)显示这些数据。 我的代码如下所示

        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="'&#10;'"/>
                           <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>