想象一下,我有一个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惯例?
答案 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,则可以联机