(Diese Antwort beruht auf der Annahme, Sie mit strukturell korrekter XML zu tun haben, nur mit nicht codierten Einheiten in #text
Knoten - diese Antwort gilt nicht, wenn Ihre Eingabedaten wirklich wie <Title="foo" />
sehen - das ist überhaupt kein XML)
Wenn ich Ihr Problem richtig verstehe, haben Sie ein XML-Dokument in einer String
Instanz, die nicht ordnungsgemäß maskierte/berechtigte Sonderzeichen enthält, die Sie von einem normalen XML-Parser zum Lesen des Dokuments verhindert.
Wenn Sie mit einem XML-kompatiblen System arbeiten, können Sie <![DATA[
verwenden und müssen dann nicht versuchen, den Inhalt des Elements <Content>
zu verarbeiten. Der Trick besteht dann darin, die CDATA-Begrenzer einzufügen.
Während oft gesagt wird, dass man keinen regulären Ausdruck verwenden kann, um XML zu analysieren (da XML kein Regular Language ist), können Sie die grammatischen Regeln von XML nutzen, um Tags zu extrahieren und zu identifizieren.
Also, wenn Sie dies:
<Content someAttribute="someValue">
reduce sales by <1% in order to ensure that profit > loss
</Content>
Dann können Sie dies tun:
String doc = @"<main><Title...";
Int32 contentOpenStart = doc.IndexOf("<Content");
Int32 contentOpenEnd = doc.IndexOf(">", contentOpenStart);
Int32 contentCloseStart = doc.IndexOf("</Content>", contentOpenEnd);
Dieser Code dann sagt uns die locatations der Winkel-Klammern der <Content>
zwei Tags des Elements, mit die können wir die CDATA Trennzeichen einfügen:
String newDocument = String.Concat(
doc.Substring(0, contentOpenEnd + 1), // "<main>...<Content...>"
"<![CDATA[",
doc.Substring(contentOpenEnd + 1, contentCloseStart),
"]]>",
doc.Substring(contentCloseStart) "</Content>..."
);
newDocument
ist dann das:
<Content someAttribute="someValue"><![CDATA[
reduce sales by <1% in order to ensure that profit > loss
]]></Content>
... was ist gültig XML.
Dies scheint kein gültiges XML zu sein. –
' ' ist kein gültiger XML-Code, da keine anonymen Attribute vorhanden sind. Meinten Sie stattdessen " foo "? –
Dai
Hallo, ich habe die ursprünglichen Codes aktualisiert ... es sollte sein als –
Trowa