1
具有這樣的XML替換字符的的XDocument的嵌套元件陣列:樞軸和具有單串
<ReplyMessage>
<tran>
<ser_num>305</ser_num>
<time>1490987995</time>
<source_type>0</source_type>
<source_number>0</source_number>
<tran_type>126</tran_type>
<tran_code>50</tran_code>
<t_diag>
<bfr>S</bfr>
<bfr>o</bfr>
<bfr>c</bfr>
<bfr>k</bfr>
<bfr>e</bfr>
<bfr>t</bfr>
<bfr></bfr>
<bfr>r</bfr>
<bfr>e</bfr>
<bfr>c</bfr>
<bfr>v</bfr>
<bfr></bfr>
<bfr>o</bfr>
<bfr>n</bfr>
<bfr></bfr>
<bfr>s</bfr>
<bfr>o</bfr>
<bfr>c</bfr>
<bfr>k</bfr>
<bfr>e</bfr>
<bfr>t</bfr>
<bfr>-</bfr>
<bfr>7</bfr>
<bfr>4</bfr>
<bfr>:</bfr>
<bfr></bfr>
<bfr>f</bfr>
<bfr>a</bfr>
<bfr>i</bfr>
<bfr>l</bfr>
<bfr>e</bfr>
<bfr>d</bfr>
<bfr></bfr>
<bfr>-</bfr>
<bfr></bfr>
<bfr>3</bfr>
<bfr>0</bfr>
<bfr>7</bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
<bfr></bfr>
</t_diag>
</tran>
</ReplyMessage>
我希望用一個簡單的字符串元素來替換<t_diag>
下嵌套<bfr>
元件陣列:
<ReplyMessage>
<tran>
<ser_num>305</ser_num>
<time>1490987995</time>
<source_type>0</source_type>
<source_number>0</source_number>
<tran_type>126</tran_type>
<tran_code>50</tran_code>
<t_diag>
<bfr>Socket recv on socket-74: failed - 307</bfr>
</t_diag>
</tran>
</ReplyMessage>
因此,從StackOverflow和MSDN拼接幾個帖子,我到達了這種方法,它的工作:
private XElement XmlPivotCharArrayToStr(XDocument xmlDoc, string parentName, string arrayName)
{
XElement parent = xmlDoc.Descendants().Where(n => n.Name == parentName).FirstOrDefault();
string st = string.Join("", parent.Elements(arrayName).Select(x => string.IsNullOrEmpty(x.Value) ? " " : x.Value)).TrimEnd();
parent.RemoveAll();
XElement newElement = new XElement(arrayName, st);
parent.Add(newElement);
return newElement;
}
這樣調用:
//// Some initial cleanup to convert character array into string
XmlPivotCharArrayToStr(xmlDoc, parentName: "t_diag", arrayName: "bfr");
現在,這個工作,在我的特定情況下,但我的感覺是幾個可以作出改進:
- 有沒有一種方法,我可以有指定了一個到parentName的顯式路徑,而不是使用.Descendants()方法?
- 有沒有更好的方法來換出數組並將其替換爲字符串? - parent.RemoveAll()可能矯枉過正。
- 是否有檢測數組的結束(),以避免使用TrimEnd提前
感謝任何提示的方式 - 我希望其他人發現(改進版),這是有用的。
謝謝,這是偉大的建議 – kpkpkp