У меня есть XDocument, который я создаю из байтового массива (полученного через tcp / ip).
Затем я ищу конкретные узлы xml (XElements) и после получения значения «выталкиваю» его изXdocument путем вызова XElement.Remove ().После того, как весь мой синтаксический анализ завершен, я хочу иметь возможность регистрировать xml, который я не анализировал (оставшийся xml в XDocument).Проблема в том, что при вызове XElement.Remove () остается дополнительный пробел.Я хочу знать, как лучше всего удалить этот лишний пробел, сохранив остальную часть формата в оставшемся xml.
Пример / Пример кода
Если я получуследующий xml через сокет:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with XML.</description>
</book>
</catalog>
И я использую следующий код, чтобы проанализировать этот xml и удалить несколько элементов XElements:
private void socket_messageReceived(object sender, MessageReceivedEventArgs e)
{
XDocument xDoc;
try
{
using (MemoryStream xmlStream = new MemoryStream(e.XmlAsBytes))
using (XmlTextReader reader = new XmlTextReader(xmlStream))
{
xDoc = XDocument.Load(reader);
}
XElement Author = xDoc.Root.Descendants("author").FirstOrDefault();
XElement Title = xDoc.Root.Descendants("title").FirstOrDefault();
XElement Genre = xDoc.Root.Descendants("genre").FirstOrDefault();
// Do something with Author, Title, and Genre here...
if (Author != null) Author.Remove();
if (Title != null) Title.Remove();
if (Genre != null) Genre.Remove();
LogUnparsedXML(xDoc.ToString());
}
catch (Exception ex)
{
// Exception Handling here...
}
}
Затем полученная строка xml отправляется насообщение LogUnparsedXML будет выглядеть следующим образом:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with XML.</description>
</book>
</catalog>
В этом надуманном примере это может показаться не таким уж большим делом, но в моем реальном приложении оставшийся xml выглядит довольно небрежно.Я попытался использовать перегрузку XDocument.ToString, которая принимает перечисление SaveOptions безрезультатно.Я также пытался вызвать xDoc.Save для сохранения в файл, используя перечисление SaveOptions.Я попытался поэкспериментировать с несколькими различными запросами linq, которые использовали XElement.Nodes().OfType<XText>()
, чтобы попытаться удалить пробел, но часто я заканчивал тем, что брал пробел, который хотел бы сохранить, вместе с пробелом, от которого я пытаюсь избавиться.
Заранее спасибо за помощь.
Джо