我正在为servlet提供一些功能,我想要做的事情之一是,当接收到InputStream(基本上是一个解析成XML格式的PDF文档)时,将数据设置为String对象,然后我尝试删除所有空标签,但到目前为止我还没有得到任何好结果:
这是servlet正在接收的数据
<form1>
<GenInfo>
<Section1>
<EmployeeDet>
<Title>999990000</Title>
<Firstname>MIKE</Firstname>
<Surname>SPENCER</Surname>
<CoName/>
<EmpAdd>
<Address><Add1/><Add2/><Town/><County/><Pcode/></Address>
</EmpAdd>
<PosHeld>DEVELOPER</PosHeld>
<Email/>
<ConNo/>
<Nationality/>
<PPSNo/>
<EmpNo/>
</EmployeeDet>
</Section1>
</GenInfo>
</form1>
最终结果应如下所示:
<form1>
<GenInfo>
<Section1>
<EmployeeDet>
<Title>999990000</Title>
<Firstname>MIKE</Firstname>
<Surname>SPENCER</Surname>
<PosHeld>DEVELOPER</PosHeld>
</EmployeeDet>
</Section1>
</GenInfo>
</form1>
我道歉,如果这是一个重复的问题,但我对类似的帖子进行了一些研究,但没有一个可以为我提供正确的方法,这就是为什么我在一个单独的帖子中问你。
提前谢谢。
答案 0 :(得分:4)
以regex
方式做你想要的事。我确定可能有一些&#34; edge&#34;我没有想到的情况,但有时您无法告诉您何时使用regex
。此外,DOM解析器可能是最好的方法。
public static void main(String[] args) throws Exception {
String[] patterns = new String[] {
// This will remove empty elements that look like <ElementName/>
"\\s*<\\w+/>",
// This will remove empty elements that look like <ElementName></ElementName>
"\\s*<\\w+></\\w+>",
// This will remove empty elements that look like
// <ElementName>
// </ElementName>
"\\s*<\\w+>\n*\\s*</\\w+>"
};
String xml = " <form1>\n" +
" <GenInfo>\n" +
" <Section1>\n" +
" <EmployeeDet>\n" +
" <Title>999990000</Title>\n" +
" <Firstname>MIKE</Firstname>\n" +
" <Surname>SPENCER</Surname>\n" +
" <CoName/>\n" +
" <EmpAdd>\n" +
" <Address><Add1/><Add2/><Town/><County/><Pcode/></Address>\n" +
" </EmpAdd>\n" +
" <PosHeld>DEVELOPER</PosHeld>\n" +
" <Email/>\n" +
" <ConNo/>\n" +
" <Nationality/>\n" +
" <PPSNo/>\n" +
" <EmpNo/>\n" +
" </EmployeeDet>\n" +
" </Section1>\n" +
" </GenInfo>\n" +
" </form1>";
for (String pattern : patterns) {
Matcher matcher = Pattern.compile(pattern).matcher(xml);
xml = matcher.replaceAll("");
}
System.out.println(xml);
}
结果:
<form1>
<GenInfo>
<Section1>
<EmployeeDet>
<Title>999990000</Title>
<Firstname>MIKE</Firstname>
<Surname>SPENCER</Surname>
<PosHeld>DEVELOPER</PosHeld>
</EmployeeDet>
</Section1>
</GenInfo>
</form1>
答案 1 :(得分:0)
您需要做的是在所有节点上递归迭代。一旦你找到一片叶子,它就是空的,只需将它移除即可。
使用DOM解析器here
有一个很好的例子