طريقة سريعة وقذرة لتحديث "معرفات" في سلسلة بتنسيق XML (C #)

StackOverflow https://stackoverflow.com/questions/258694

سؤال

لعملية لطلقة واحدة، ولست بحاجة إلى تحليل محتويات سلسلة XML وتغيير الأرقام من حقل "ID". ومع ذلك، لا أستطيع المجازفة تغيير أي شيء آخر من السلسلة، على سبيل المثال. بيضاء، خط إس، الخ يجب أن تبقى كما هي!

ومنذ لقد جعلت التجربة التي XmlReader يميل إلى الفوضى بيضاء تصل، بل وربما إعادة XML الخاصة بك أنا لا ترغب في استخدامه (ولكن لا تتردد في إقناع لي خلاف ذلك). هذا الصراخ أيضا باستخدام التعابير المنطقية ولكن ... أنا لست جيدة في التعابير المنطقية، وخاصة مع عدم تنفيذ .NET.

وهنا جزء قصير من السلسلة، يحتاج إلى التحديث في بعض الحالات عدد من حقل ID. يمكن أن يكون هناك العديد من مثل هذه القيود VAR في السلسلة. لذلك أنا بحاجة إلى تحويل كل ID إلى Int32، قارن وتعديله، ثم وضعها مرة أخرى في السلسلة.

<VAR NAME="sf_name" ID="1001210">

وأنا أبحث عن أبسط (من حيث الترميز الوقت) وأسلم طريقة للقيام بذلك.

هل كانت مفيدة؟

المحلول

ونمط التعابير المنطقية كنت تبحث عن:

ID="(\d+)"

ومجموعة المباراة 1 سيتضمن العدد. استخدام MatchEvaluator مندوب للاستبدال مباريات مع تحسب البدلاء بشكل حيوي.

Regex r = new Regex("ID=\"(\\d+)\"");
string outputXml = r.Replace(inputXml, new MatchEvaluator(ReplaceFunction));

وحيث ReplaceFunction شيء من هذا القبيل:

public string ReplaceFunction(Match m)
{
  // do stuff with m.Groups(1);
  return result.ToString();
}

إذا كنت في حاجة أنا يمكن توسيع التعبيرات المنتظمة لتتناسب بشكل أكثر تحديدا. حاليا <م> جميع يتم استبدال قيم معرف (التي تحتوي على أرقام فقط). يمكنك أيضا بناء أن قليلا من "الذكاء اضافية" في وظيفة مباراة المقيم وجعله يعود المباراة دون تغيير إذا كنت لا ترغب في تغييره.

نصائح أخرى

ونلقي نظرة على هذا العقار PreserveWhitespace XmlDocument الدرجة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top