从java的XML文档中只获取txt?

时间:2017-02-07 11:27:16

标签: java xml parsing

早上,你怎么能从这个xml项目(描述)中只得到txt?

var dynamic = 5;
var a = storelocatorjstext.nostores;
var b = ???;

我的代码现在是

<description><![CDATA[<b>
<font color="#000000">hello world...</font>
</b>]]></description>

打印结果为:

if (cureent.getNodeName().equalsIgnoreCase("description")){
item.setDescription(cureent.getTextContent());

这就是我需要打印的内容:

<![CDATA[<b><font color="#000000">hello world...</font></b>]]>

全部谢谢

4 个答案:

答案 0 :(得分:0)

可能有一个解析器,你可以使用它,但我认为一个简单的正则表达式应该完成工作:

String textContent = cureent.getTextContent();
String stripped = textContent.replaceAll("^<!\\[CDATA\\[|\\]\\]>$|<[^>]*>","");
item.setDescription(stripped);

以下是上面使用的模式的细分:

            "^<!\\[CDATA\\[" // find "<![CDATA[" at beginning
            +"|"             // or 
            +"\\]\\]>$"      // find "]]>" at ending
            +"|"             // or
            +"<[^>]*>"      // every tag from "<" up to ">" 

当然,正如评论者提醒我们的那样,如果您有嵌套标签,即上面的简单正则表达式将会失败,即“&gt;”出现在某个实际上没有关闭标签的地方。如果这种类型的数据是可能的,那么最好使用真正的解析器,例如Jsoup。

答案 1 :(得分:0)

由于您的输入文件不是格式良好的XML,因此我们无法使用DocumentBuilder类将其解析为XML。 因此,我们需要通过将其作为纯文本文件处理来破解它。 以下是我的尝试:

    BufferedReader br = null;
    FileReader fr = null;

    try {

        fr = new FileReader("D:\\workspace\\Test\\Trial.xml"); // Put your text here
        br = new BufferedReader(fr);

        String sCurrentLine;
        StringBuffer totalString = new StringBuffer();

        while ((sCurrentLine = br.readLine()) != null) {
            totalString.append(sCurrentLine);
        }

        String condensedString = totalString.substring(totalString.indexOf("<font color="),
                totalString.indexOf("</font>"));

        String moreCondensedString = condensedString.replaceAll("[0-9]", "").replaceAll("#", "");
        System.out.println(moreCondensedString.substring(moreCondensedString.indexOf('>') + 1));
    } catch (IOException e) {

        e.printStackTrace();

    } 

这里我首先通过从<font color=</font>标记中剪切字符串来压缩字符串。

然后我替换了所有numbersspecial characters

然后我通过从'>'

切割它来再次压缩字符串

希望它有所帮助!

答案 2 :(得分:0)

试试这个

if (cureent.getNodeName().equalsIgnoreCase("description")){
item.setDescription(cureent.getTextContent().replaceAll("<.*?>", ""););

答案 3 :(得分:0)

我想出了一个使用Jsoup的解决方案,它适用于您的示例输入。但建议使用各种输入进行测试。

public static void main(String[] args) throws Exception {
    String xml = "<description><![CDATA[<b>\r\n" + 
            "<font color=\"#000000\">hello world...</font>\r\n" + 
            "</b>]]></description>";
    Document d = Jsoup.parse(xml);
    String text = extractText(d.getElementsByTag("description").get(0).text());
    System.out.println(text);

}

private static String extractText(String xml) {
    Document d = Jsoup.parse(xml);
    d = Jsoup.parse(xml);
    if(!xml.equals(d.text())){
        return extractText(d.text());
    }
    return d.text();
}