У меня есть HTML файл huuge, что-то вроде этого:
<html>
<head>
</head>
<body>
<div id="wraper">
<div id="..."> </div>
<div id="..."> </div>
<div id="..."> </div>
<div class="col x8 black">
<div class="sidebar">
<script .../>
<script .../>
<div class="side-box last10">
<h3 .../>
<ul class="sidebarlist">
<li class="fisrt"> Need this Text </li>
<li> Need this Text too (1) </li>
<li> Need this Text too (2) </li>
</ul>
</div>
</div
</div>
</body>
Как я могу "перемещаться" в этом html файле, чтобы получить текст, который я хочу?
html->body->div#wraper->div#col x8 black-> div#side-vox last10-> ul#sidebarlist -> li#first
Для этой работы лучше DOM или SAX? (Я не являюсь носителем английского языка)
Вы считали XPath? Ваш псевдокод:
html->body->div#wraper->div#col x8 black-> div#side-vox last10->
ul#sidebarlist -> li#first
... переводится непосредственно в следующее выражение XPath:
/html/body/div[@id='wraper']/div[@class='col x8 black']/
div[@class='side-vox last10']/ul[@class='sidebarlist']/li[@class='fisrt']
Или, более лаконично (при условии, что структура в вашем примере является репрезентативной):
/html/body/div[1]/div[4]/div[1]/div[1]/ul[1]/li[1]
Информацию об использовании XPath на Android можно найти здесь:
t metioned if) I don
нет XPath, но я читал о библиотеке, которая может делать это.
вы можете использовать XmlPullParser для этого. Пожалуйста, перейдите по нижеследующему коду:
public void parsing(String str1) throws XmlPullParserException, IOException{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput( new StringReader (str1));
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String str;
if(eventType == XmlPullParser.START_DOCUMENT) {
System.out.println("Start document");
} else if(eventType == XmlPullParser.START_TAG) {
str = xpp.getName();
System.out.println("Start tag "+str);
if(xpp.getName().equals("div")){
int attrCount = xpp.getAttributeCount();
if(attrCount != -1) {
for(int x=0;x<attrCount;x++) {
System.out.println("Attr Name= "+ xpp.getAttributeName(x));
System.out.println("Attr Value= "+ xpp.getAttributeValue(x));
}
}
}
} else if(eventType == XmlPullParser.END_TAG) {
System.out.println("End tag "+xpp.getName());
} else if(eventType == XmlPullParser.TEXT) {
System.out.println("Value= "+xpp.getText());
}
eventType = xpp.next();
}
System.out.println("End document");
}
xpp.getChild("html").getChild("body").getValue();
?