解析xml字符串和使用java修剪特定标记空间的最佳方法

时间:2015-06-22 22:42:20

标签: java xml parsing

想象一下,我有一个xml格式的字符串

String gandalfSchema = "<Wizard><Name> Gandalf </Name><God Mode>Off</God Mode></Wizard>";

我想删除多个标签的值的所有前导和尾随空格;在这种情况下Gandalf中的<Name>

我不确定以下方式是否最好:

String nameBeginIndex = gandalfSchema.substring("<Name>");
String nameEndIndex = gandalfSchema.substring("</Name>");
String nameRaw = gandalfSchema.substring(nameBeginIndex+6,nameEndIndex);
String nameProcessed = nameRaw;
String stringBeforeNameRaw = gandalfSchema.substring(nameBeginIndex);
String stringAfterNameRaw = gandalfSchema.substring(nameEndIndex);
gandalfSchema = stringBeforeNameRaw + nameProcessed + stringAfterNameRaw

现在想象上面做3-4个标签,我认为这是不好的做法。是否存在我可能忽略的Java库或Java惯例?

4 个答案:

答案 0 :(得分:1)

您需要的是XML Parsers。已经有这么多可用。谷歌一下。 为什么要重新发明轮子,除非你试图自己构建新的解析器(这是不太可能的)。

答案 1 :(得分:0)

您可以将XSLT与Java Transformer API一起使用。 Here是一个类似的例子,可以帮助您入门。

答案 2 :(得分:0)

我建议使用JaxB并实际创建基于xml的对象

向导类

@XmlRootElement(name="Wizard")
public class Wizard {

    private String name;
    private String godMode;


    public String getName() {
        return this.name;
    }

    @XmlElement(name="Name")
    public void setName(String name) {
        this.name = name;
    }

    public String getGodMode() {
        return this.godMode;
    }

    @XmlElement(name="GodMode")
    public void setGodMode(String godMode) {
        this.godMode = godMode;
    }
}

然后使用unmarshalled从xml

获取对象

<强>的Unmarshaller

JAXBContext jaxbContext = JAXBContext.newInstance(Wizard.class);

Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

StringReader reader = new StringReader("<Wizard><Name> Gandalf </Name><GodMode>Off</GodMode></Wizard>");
Wizard wizard = (Wizard) unmarshaller.unmarshal(reader);

然后你可以随心所欲地做它。此外,“上帝模式”有一个空格,但不适用于元素名称(如果可能的话,可以更改它,或者你可能必须在解组前对它进行替换)。

答案 3 :(得分:0)

是的,使用Java附带的jaxb并使用任何IDE,您可以创建xml类,并且可以更好,更简单地使用Marshall和uarshall 您需要知道您的Xsd,并且如果您已准备好xml,则可以联机