如果标签的内容包含 > 或 <,您将如何解析 java 中的 xml?
How would you parse xml in java if the content of a tag contains > or <?
目前,我正在使用 XMLInputFactory
和 XMLEventReader
从 rss 数据提要中解析 XML。在描述中,在>
和<
的使用中包含了html标签。 Java 将其作为实际标签读取,并认为描述结束,因此中断并转到下一个元素。如何从解析中排除标签?
您可以用您知道的特定唯一标签临时替换每个 >
和 <
标签。然后,进行解析,并在完成解析后再次将它们替换为 >
和 <
标记,如以下代码所示。
String original = "<container>>This< is a >test<</container>";
String newStr = original.replace(">", "_TMP_CHARACTER_G_").replace("<", "_TMP_CHARACTER_L_");
System.out.println(original + "\n" + newStr);
// Print <container>>This< is a >test<</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_", ">").replace("_TMP_CHARACTER_L_", "<");
System.out.println(theConvertedTag);
// Print the original String <container>>This< is a >test<</container>
我不太使用拉式解析器 (XMLEventReader
),但我相信,与 SAX 解析器一样,它可以将文本节点报告为一系列 Characters
事件,而不是作为单个事件,而是由应用程序将它们连接起来。解析器最有可能选择拆分内容的位置是实体边界,以避免在扩展实体时批量复制字符数据。
目前,我正在使用 XMLInputFactory
和 XMLEventReader
从 rss 数据提要中解析 XML。在描述中,在>
和<
的使用中包含了html标签。 Java 将其作为实际标签读取,并认为描述结束,因此中断并转到下一个元素。如何从解析中排除标签?
您可以用您知道的特定唯一标签临时替换每个 >
和 <
标签。然后,进行解析,并在完成解析后再次将它们替换为 >
和 <
标记,如以下代码所示。
String original = "<container>>This< is a >test<</container>";
String newStr = original.replace(">", "_TMP_CHARACTER_G_").replace("<", "_TMP_CHARACTER_L_");
System.out.println(original + "\n" + newStr);
// Print <container>>This< is a >test<</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_", ">").replace("_TMP_CHARACTER_L_", "<");
System.out.println(theConvertedTag);
// Print the original String <container>>This< is a >test<</container>
我不太使用拉式解析器 (XMLEventReader
),但我相信,与 SAX 解析器一样,它可以将文本节点报告为一系列 Characters
事件,而不是作为单个事件,而是由应用程序将它们连接起来。解析器最有可能选择拆分内容的位置是实体边界,以避免在扩展实体时批量复制字符数据。