谢谢各位高手帮忙。
这两天需要解决一个,从其他网站的xml中提取元素信息的工作的问题,但试了很多种方法都有问题,google了很久,但越查疑问越多,所以这里把思路和疑问,都写出来,希望各位能帮忙解决下。目标xml:其他网站上的,非本地
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/layout/character-sheet.xsl"?><page globalSearch="1" lang="en_us" requestUrl="/character-sheet.xml">
<characterInfo>
.......
</characterInfo>具体任务目标:得到xml中具体的元素的值,用来填充自己的网站方法一:xml解析函数(关键代码)
Sring s = "这里是目标网页网址";
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
doc = docBuilder.parse (new File(s));
t.printStackTrace ();
错误:url 错误,只能取到本地地址,无法使用完整的网页地址。(也许取的到,但我没成功,而且不知道FILE能不能直接这么取)方法二:数据流读入
URL url = new URL("目标地址");
URLConnection uc = url.openConnection();
HttpURLConnection connection = (HttpURLConnection) uc;
connection.setDoOutput(true);
connection.setDoInput(true);
InputStream in = connection.getInputStream();
String str = "";
byte[] b = new byte[2];
//读出输入流到string中
int i = in.read(b);
while (-1 != i) {
str = str + new String(b, 0, b.length);
i = in.read(b);
}
sb = new StringBuffer(str);
StringReader sr = new StringReader(sb.toString());
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder docuBuilder = factory.newDocumentBuilder();
InputSource source = new InputSource(sr);
Document document = docuBuilder.parse(source);
in.close();问题:读取xml没有问题,但读取具有<?xml-stylesheet type="text/xsl" href="/layout/character-sheet.xsl"?>,读出来的就是被浏览器编译过的html文件了,提取数据非常麻烦。方法三:使用js
function getData(){
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("http://www.wowarmory.com/character-sheet.xml?r=Spirestone&n=Vilden");
}
问题:在IE上可以使用这种方法,也得到了想要的数据,但是在将得到的资源(比如图片)放到自己的网页的时候,火狐就会禁止我这么做,造成别人无法访问我的网页方法四:在坚持使用jsp的情况下,使用asp去读xmlasp提供有xml的解析程序,我准备把读到的程序写到一个服务器页面上去,然后再用jsp的方法读取,但是似乎效率很低。希望,各位大侠能够帮我看看,哪种方法更好,或者有更好的方法
这两天需要解决一个,从其他网站的xml中提取元素信息的工作的问题,但试了很多种方法都有问题,google了很久,但越查疑问越多,所以这里把思路和疑问,都写出来,希望各位能帮忙解决下。目标xml:其他网站上的,非本地
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/layout/character-sheet.xsl"?><page globalSearch="1" lang="en_us" requestUrl="/character-sheet.xml">
<characterInfo>
.......
</characterInfo>具体任务目标:得到xml中具体的元素的值,用来填充自己的网站方法一:xml解析函数(关键代码)
Sring s = "这里是目标网页网址";
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
doc = docBuilder.parse (new File(s));
t.printStackTrace ();
错误:url 错误,只能取到本地地址,无法使用完整的网页地址。(也许取的到,但我没成功,而且不知道FILE能不能直接这么取)方法二:数据流读入
URL url = new URL("目标地址");
URLConnection uc = url.openConnection();
HttpURLConnection connection = (HttpURLConnection) uc;
connection.setDoOutput(true);
connection.setDoInput(true);
InputStream in = connection.getInputStream();
String str = "";
byte[] b = new byte[2];
//读出输入流到string中
int i = in.read(b);
while (-1 != i) {
str = str + new String(b, 0, b.length);
i = in.read(b);
}
sb = new StringBuffer(str);
StringReader sr = new StringReader(sb.toString());
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder docuBuilder = factory.newDocumentBuilder();
InputSource source = new InputSource(sr);
Document document = docuBuilder.parse(source);
in.close();问题:读取xml没有问题,但读取具有<?xml-stylesheet type="text/xsl" href="/layout/character-sheet.xsl"?>,读出来的就是被浏览器编译过的html文件了,提取数据非常麻烦。方法三:使用js
function getData(){
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("http://www.wowarmory.com/character-sheet.xml?r=Spirestone&n=Vilden");
}
问题:在IE上可以使用这种方法,也得到了想要的数据,但是在将得到的资源(比如图片)放到自己的网页的时候,火狐就会禁止我这么做,造成别人无法访问我的网页方法四:在坚持使用jsp的情况下,使用asp去读xmlasp提供有xml的解析程序,我准备把读到的程序写到一个服务器页面上去,然后再用jsp的方法读取,但是似乎效率很低。希望,各位大侠能够帮我看看,哪种方法更好,或者有更好的方法
doc = docBuilder.parse ("xml文档所在的uri地址");
得到html后使用正则表达式去读去页面上你想要的数据就OK了 。
或者直接使用它的html,再down下它的css js 就OK了(很流氓,大家不要骂我)
1 直接返回要用的数据
2 直接返回读取到的内容然后页面直接用Ajax调用就行了,这样可以解决跨域访问的问题。
http://**/character-sheet.xml,但因为有一句<?xml-stylesheet type="text/xsl" href="/layout/character-sheet.xsl"?> <page globalSearch="1" lang="en_us" requestUrl="/character-sheet.xml"> 就是会出错;我将xml文件手动下到本地后,删除这句话后,把它放到自己服务器上后,就可以读取到xml了.很奇怪
)