如何避免XML文档中的html标记

时间:2012-10-01 03:20:51

标签: .net xml vb.net xml-parsing xmlreader

我有一个XML文档,其格式如下所示;

<root>
<DETAIL Replaces="XYZ" />
<DETAIL Description="Problem:<br><br>CRS750 dumps when panel F is opened<br><br>>>y" />
<DETAIL StepsToReproduce="ABC" />
</root>

使用以下功能,我可以将上面加载的XML文档转换为所需的格式;

Function ProcessDetail(ByVal xmlText As String) As String
   xtr = New XmlTextReader("GetXMLFileLocation")
        xtr.WhitespaceHandling = WhitespaceHandling.None
        xmlDoc.Load(xtr)
        xtr.Close()

    Dim xmlDoc As New XmlDocument()
    xmlDoc.LoadXml(xmlText)
    Dim sDetail As New StringBuilder()
    sDetail.Append("<DETAIL>")
    For Each detailNode As XmlNode In xmlDoc.SelectNodes("//DETAIL")
        If Not detailNode.Attributes Is Nothing Then
            For Each attribute As XmlAttribute In detailNode.Attributes
 sDetail.Append("<" & attribute.Name.ToUpper & ">" & attribute.Value & "</" &    
 attribute.Name.ToUpper & ">")
            Next
        End If
    Next
    sDetail.Append("</DETAIL>")
    Return sDetail.ToString()
End Function

问题: - 由于DETAIL下的描述节点有一些'HTML'标签,因此会出现以下错误。请帮我避免,并给出以下输出。

ERROR MESSAGE : '<', hexadecimal value 0x3C, is an invalid attribute character. Line 
1,  position 1326.


DESIRED OUTPUT :
 <root>
 <DETAIL>
 <REPLACES>XYZ</REPLACES> 
 <DESCRIPTION>Problem:<br><br>CRS750 dumps when panel F is opened<br> 
 <br>>>y</DESCRIPTION>
 <STEPSTOREPRODUCE>ABC<STEPSTOREPRODUCE/>
 <root>

2 个答案:

答案 0 :(得分:0)

html-in-xml将是一个无效的XML文档,需要在生成xml的源代码中修复。例如XML解析器不可能分辨出什么应该是XML的一部分,什么只是一个html标记。例如xml应该看起来像

<somexmltag>&lt;p&gt;This is a paragraph with embedded &lt;i&gt;italics&lt;/i&gt;&lt;/p>&gt;</somexmltag>

或使用CDATA:

<somexmltag><![CDATA[<p>This is a paragraph with embedded <i>italics</i></p>]]></somexmltag>

答案 1 :(得分:0)

使用&amp; lt;而不是&lt;,&amp; amp;代替&amp;,并且可选地&amp; gt;代替&gt;,也&amp; quot;用于“和/或&amp;用于'

如果要生成(或转义)HTML,请确保在其他字符之前更改和符号! : - )

您不能在属性中使用CDATA部分。此外,CDATA部分有时会出现在HTML中,并且它们不会嵌套,如果您不小心,可能导致代码破坏甚至安全漏洞。 (CDATA注射攻击)。