簡體   English   中英

如何在不連接的情況下獲取 XML 節點 InnerText 並在 C# 中使用 Xml.Linq?

[英]How to get XML nodes InnerText without concatenation and using Xml.Linq in C#?

我已經檢查了 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>

我正在嘗試讀取<cmd name="cat">的子節點<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 )被剝離。 我需要按原樣獲取文本,沒有任何連接或重新格式化,但不知道如何實現。

我嘗試了多種選擇,但找不到解決方案。

謝謝。

我認為這可能與您將文本放入的對象(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;
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM