如果标签的内容包含 > 或 <,您将如何解析 java 中的 xml?

How would you parse xml in java if the content of a tag contains &gt; or &lt;?

目前,我正在使用 XMLInputFactoryXMLEventReader 从 rss 数据提要中解析 XML。在描述中,在&gt;&lt;的使用中包含了html标签。 Java 将其作为实际标签读取,并认为描述结束,因此中断并转到下一个元素。如何从解析中排除标签?

您可以用您知道的特定唯一标签临时替换每个 &gt;&lt; 标签。然后,进行解析,并在完成解析后再次将它们替换为 &gt;&lt; 标记,如以下代码所示。

String original = "<container>&gt;This&lt; is a &gt;test&lt;</container>";
String newStr = original.replace("&gt;", "_TMP_CHARACTER_G_").replace("&lt;", "_TMP_CHARACTER_L_");
System.out.println(original + "\n" + newStr);
// Print <container>&gt;This&lt; is a &gt;test&lt;</container>
// and <container>_TMP_CHARACTER_G_This_TMP_CHARACTER_L_ is a _TMP_CHARACTER_G_test_TMP_CHARACTER_L_</container>
        
// [Do your parsing here]
        
String theTagYouWant = newStr;
String theConvertedTag = theTagYouWant.replace("_TMP_CHARACTER_G_", "&gt;").replace("_TMP_CHARACTER_L_", "&lt;");
System.out.println(theConvertedTag);
// Print the original String <container>&gt;This&lt; is a &gt;test&lt;</container>

我不太使用拉式解析器 (XMLEventReader),但我相信,与 SAX 解析器一样,它可以将文本节点报告为一系列 Characters 事件,而不是作为单个事件,而是由应用程序将它们连接起来。解析器最有可能选择拆分内容的位置是实体边界,以避免在扩展实体时批量复制字符数据。