我有一个项目,我将CMS中的内容输出到XML中。我没有完全控制CMS的内容,我们现在遇到某些内容不完全符合XML的问题
<Block PageGuid="xxx" PageId="1234" PageType="block" PageName="blockpage" PageUrl="/en/New-Folder7/New-Folder8/" CreateBlock="false">
<Properties>
<Property PropertyName="EmbedCode" Ignore="false" DefaultLanguageChanged="true" TranslatedChanged="true">
<DefaultLanguage><DIV id=TA_sss class=TA_sss><UL id=sdfsdfsdfsdf class="TA_links xx"><LI id=sdfsdfsf class=sdfsfsf><A href="http://www.tripadvisor.co.uk/">xxxxxxxxx</A></LI></UL></DIV><SCRIPT src="http://www.jscache.com/"></SCRIPT></DefaultLanguage>
<Translation><DIV id=TA_sss class=TA_sss><UL id=xxxx class='TA_links xxx'><LI id=xxxx class=xxxx><A href='http://www.tripadvisor.co.uk/'>xxxxxxxxx</A></LI></UL></DIV><SCRIPT src='http://www.jscache.com/'></SCRIPT></Translation>
<PreviousValues>
<PreviousDefaultText></PreviousDefaultText>
<PreviousTranslationText></PreviousTranslationText>
</PreviousValues>
</Property>
</Properties>
</Block>
请参阅上面的XML ..我需要查找任何具有缺少引号的属性的情况,添加in:
即
如果它们是单引号,则用双引号替换
即。
http://www.tripadvisor.co.uk/'>
我将整个XML放在一个字符串中,所以我希望有一个我可以使用的正则表达式吗?
我的解决方案:
var reader = new StringReader(xml);
var sgmlReader = new Sgml.SgmlReader
{
DocType = "HTML",
WhitespaceHandling = WhitespaceHandling.All,
CaseFolding = Sgml.CaseFolding.ToLower,
InputStream = reader
};
var doc = new XmlDocument { PreserveWhitespace = true, XmlResolver = null };
doc.Load(sgmlReader);
答案 0 :(得分:3)
我过去曾使用https://github.com/MindTouch/SGMLReader来解决类似的问题。像魅力(YMMV)一样工作。
答案 1 :(得分:2)
您可以尝试Html Agility Pack。引用您可能感兴趣的部分:
'The parser is very tolerant with "real world" malformed HTML'
和
'Sample applications: Page fixing or generation'
所以你去吧。加载XML,生成一个“正确”的渲染,然后传递它。