سؤال

وهكذا أنا أحاول تحليل بعض XML، وإنشاء التي ليست تحت سيطرتي. المشكلة هي، وأنها قد حصلت بطريقة أو بأخرى العقد التي تبدو مثل هذا:

<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(MORNINGSTAR) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(QUARTERSTAFF) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(SCYTHE) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(TRATNYR) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(TRIPLE-HEADED_FLAIL) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(WARAXE) />

والبصرية ستوديو و. NET على حد سواء يشعرون بأن الأحرف '(' و ')'، كما يستخدمه أعلاه، غير صالحة تماما. للأسف، ولست بحاجة لمعالجة هذه الملفات! هل هناك أي طريقة للحصول على دروس أكس القارئ أن لا يفزع لرؤية هذه الشخصيات، أو حيوي يهرب منهم أو شيء من هذا؟ يمكن أن أفعله نوعا ما قبل المعالجة على الملف بأكمله، ولكن أريد الأحرف '(' و ')' إذا كانت تظهر داخل عقدة في بعض الطريق الصحيحة، لذلك أنا لا أريد لإزالة كل منهم فقط. ..

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

المحلول

وهذا هو ببساطة غير صالحة. ما قبل المعالجة هو أفضل رهان، وربما مع التعابير المنطقية - شيء من هذا القبيل:

string output = Regex.Replace(input, @"(<\w+)\((\w+)\)([ >/])", "$1$2$3");

وتحرير: قليلا أكثر تعقيدا لتحل محل "-" داخل الأقواس:

string output = Regex.Replace(input, @"(<\w+)\(([-\w]+)\)([ >/])",
    delegate(Match match) {
        return match.Groups[1].Value + match.Groups[2].Value.Replace('-', '_')
             + match.Groups[3].Value;
    });

نصائح أخرى

وإذا كان غير صحيح نحويا، انها ليست XML.

وXML صارمة للغاية حول هذا الموضوع.

إذا كنت لا يمكن الحصول على التطبيق إرسال لإرسال XML الصحيح، ثم مجرد السماح لهم نعلم أن <م> مهما ترى عملية المصب هذا <م> ستفشل ، سواء كان لك أو بعض التطبيق الأخرى في المستقبل.

إذا تجهيزها ليست خيارا، وآلية ذكية أخرى هي التفاف الكائن Stream التي يتم تمريرها إلى محلل مع تيار المخصصة. هذا الدفق يمكن أن ننظر لشخصيات <، وعندما يرى المرء، تعيين إشارة. حتى شخصية > هو رؤية، ويمكن أن تأكل أي ( أو ) حرفا. لقد استخدمنا شيئا من هذا القبيل للتخلص من NUL و^ الأحرف Z تضاف إلى ملف XML من خلال آلية النقل القديمة. (الأحرف مسكتك قد يكون هناك < فقط داخل سمة، لأنها لا يجب أن تكون هناك هرب - > فقط الأحرف تفعل)

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