在Java中使用XPath解析XML时发生致命错误
我想解析一个XML文件。它在创建对象时引发异常:在Java中使用XPath解析XML时发生致命错误,java,xml,xpath,xml-parsing,Java,Xml,Xpath,Xml Parsing,我想解析一个XML文件。它在创建对象时引发异常: Document doc = builder.parse("Response.xml"); <A> <LANGUAGENAME.LIST> <NAME.LIST TYPE="String"> <NAME>ABC India (P) Ltd.,</NAME> </NAME.LIST> <LANGUAGEID TYPE="Number"
Document doc = builder.parse("Response.xml");
<A>
<LANGUAGENAME.LIST>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>
例外情况:
[Fatal Error] Response.xml:63:67: The prefix "UDF" for element "UDF:RTSIDUDF.LIST" is not bound.
Exception in thread "main" org.xml.sax.SAXParseException: The prefix "UDF" for element "UDF:RTSIDUDF.LIST" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:249)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:180)
at tallyreqandresponse.Ledger.main(Ledger.java:38)
Java Result: 1
<A>
<LANGUAGENAME.LIST>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>
示例xml代码:
<A>
<LANGUAGENAME.LIST>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>
ABC印度(P)有限公司。,
1033
1387
请帮我摆脱困境
<A>
<LANGUAGENAME.LIST>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>
编辑说明:添加了LANGUAGENAME.LIST开始标记您的输入标记不是名称空间格式良好的XML,因此被XML解析器拒绝。您需要使用例如
<A>
<LANGUAGENAME.LIST>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>
<A>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST xmlns:UDF="http://example.com/" DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>
ABC印度(P)有限公司。,
1033
1387
您的输入标记不是格式良好的XML,因此被XML解析器拒绝。您需要使用例如
<A>
<LANGUAGENAME.LIST>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>
<A>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST xmlns:UDF="http://example.com/" DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>
ABC印度(P)有限公司。,
1033
1387
在缺少的命名空间定义旁边,似乎还有一个不匹配的标记:
<A>
<LANGUAGENAME.LIST>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>
</LANGUAGENAME.LIST>
没有相应的开始标记
<A>
<LANGUAGENAME.LIST>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>
如果你在谷歌上搜索
xml名称空间
,你会得到很多好的链接——比如看看 除了缺少的命名空间定义之外,似乎还有一个不匹配的标记:
<A>
<LANGUAGENAME.LIST>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>
</LANGUAGENAME.LIST>
没有相应的开始标记
<A>
<LANGUAGENAME.LIST>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>
如果你在谷歌上搜索
xml名称空间
,你会得到很多好的链接——比如看看 您需要具有UDF命名空间描述的xmlns。您需要具有UDF命名空间描述的xmlns。有关格式规范,请参阅。还要注意xmlns:UDF=”http://example.com/“
就是一个例子,我无法识别您的格式,因此无法将URL与之关联。有关格式规范,请参阅。还要注意xmlns:UDF=”http://example.com/“
就是一个例子,我不认识您的格式,因此无法将URL与之关联。
<A>
<LANGUAGENAME.LIST>
<NAME.LIST TYPE="String">
<NAME>ABC India (P) Ltd.,</NAME>
</NAME.LIST>
<LANGUAGEID TYPE="Number"> 1033</LANGUAGEID>
<UDF:RTSIDUDF.LIST DESC="`RTSIDUDF`" ISLIST="YES" TYPE="Number">
<UDF:RTSIDUDF DESC="`RTSIDUDF`"> 1387</UDF:RTSIDUDF>
</UDF:RTSIDUDF.LIST>
</LANGUAGENAME.LIST>
</A>