如何在不进行连接的情况下获取XML节点InnerText并在C#中使用Xml.Linq?

问题描述 投票:1回答:1

我已经检查了Stackoverflow上发布的几个问题,但似乎没有一个可以解决我的情况,我可以尝试解释。

我将具有以下内容的下一个XML文件放入磁盘(commands.xml):

<?xml version="1.0" encoding="utf-8"?>
<categories>
  <category name="Standard">
    <cmd name="pwd">
      <description>Get working dir.</description>
      <code>echo getcwd();</code>
    </cmd>
    <cmd name="cat">
      <description>Reads a file.</description>
      <code>$fh = fopen("&lt;&lt;cmd&gt;&gt;", 'r') or die ("Cant open file");
$lines = fread($fh, filesize("&lt;&lt;cmd&gt;&gt;"));
echo "$lines";
fclose($fh);</code>
    </cmd>
    </category>
</categories>

我正在尝试读取<code>的子节点<cmd name="cat">,因为您看到它包含几行。

我的实际代码是:

            var xml = XElement.Load("commands.xml");
            var query = xml.Descendants()
                .Where(x => x.Name == "category" && x.Attribute("name").Value == "Standard")
                .Descendants()
                .Where(x => x.Name == "cmd" && x.Attribute("name").Value == "cat");

            var first_query_result = query.FirstOrDefault();
            if (first_query_result != null)
            {
                textBox_cmd_code_editor.Text = first_query_result.Descendants("code").Single().Value;
            }

问题是文本被连接起来,并且跳线(\r\n)被剥夺了。我需要按原样获得文本,而没有任何串联或重新格式化,但不知道如何实现。

我尝试了多个选项,但找不到解决方案。

谢谢。

c# xml linq-to-xml xelement
1个回答
0
投票

我认为这可能与您将文本放入(textBox_cmd_code_editor.Text)的对象有关。

我将您的输出放入普通的字符串变量中,并保留了换行符。

尝试将输出放入普通的字符串变量,然后从那里进行操作。您的目标对象可能不支持换行符,等等。

编辑:您需要将换行符转换为Environment.NewLine,如下所示:

            string originalString;
        string convertedString;
        if (first_query_result != null)
        {
            originalString = first_query_result.Descendants("code").Single().Value;
            convertedString = Regex.Replace(originalString, @"\r\n?|\n", Environment.NewLine);
            textBox1.Text = convertedString;
        }
© www.soinside.com 2019 - 2024. All rights reserved.