gpt4 book ai didi

javascript - 在 Javascript 中解析 HTML 的最佳方式

转载 作者:可可西里 更新时间:2023-11-01 02:49:12 25 4
gpt4 key购买 nike

我在学习 RegExp 和想出一个好的算法来做到这一点时遇到了很多麻烦。我有需要解析的 HTML 字符串。请注意,当我解析它时,它仍然是一个字符串对象,而不是浏览器上的 HTML,因为我需要在它到达那里之前对其进行解析。 HTML 看起来像这样:

<html>
<head>
<title>Geoserver GetFeatureInfo output</title>
</head>
<style type="text/css">
table.featureInfo, table.featureInfo td, table.featureInfo th {
border:1px solid #ddd;
border-collapse:collapse;
margin:0;
padding:0;
font-size: 90%;
padding:.2em .1em;
}
table.featureInfo th {
padding:.2em .2em;
font-weight:bold;
background:#eee;
}
table.featureInfo td{
background:#fff;
}
table.featureInfo tr.odd td{
background:#eee;
}
table.featureInfo caption{
text-align:left;
font-size:100%;
font-weight:bold;
text-transform:uppercase;
padding:.2em .2em;
}
</style>

<body>
<table class="featureInfo2">
<tr>
<th class="dataLayer" colspan="5">Tibetan Villages</th>
</tr>
<!-- EOF Data Layer -->
<tr class="dataHeaders">
<th>ID</th>
<th>Latitude</th>
<th>Longitude</th>
<th>Place Name</th>
<th>English Translation</th>
</tr>
<!-- EOF Data Headers -->
<!-- Data -->
<tr>
<!-- Feature Info Data -->
<td>3394</td>
<td>29.1</td>
<td>93.15</td>
<td>བསྡམས་གྲོང་ཚོ།</td>
<td>Dam Drongtso </td>
</tr>
<!-- EOF Feature Info Data -->
<!-- End Data -->
</table>
<br/>
</body>
</html>

我需要这样得到它:

3394,
29.1,
93.15,
བསྡམས་གྲོང་ཚོ།,
Dam Drongtso

基本上是一个数组...如果它根据其字段标题和它们以某种方式来自哪个表进行匹配,那就更好了,看起来像这样:

Tibetan Villages

ID
Latitude
Longitude
Place Name
English Translation

发现 JavaScript 不支持美妙的映射是一件令人失望的事情,我已经有了我想要的工作。然而,它是非常非常硬编码的,我想我应该使用 RegExp 来更好地处理这个问题。不幸的是,我真的很难过 :(。这是我解析字符串的函数(IMO 非常丑陋):

    function parseHTML(html){

//Getting the layer name
alert(html);
//Lousy attempt at RegExp
var somestring = html.replace('/m//\<html\>+\<body\>//m/',' ');
alert(somestring);
var startPos = html.indexOf('<th class="dataLayer" colspan="5">');
var length = ('<th class="dataLayer" colspan="5">').length;
var endPos = html.indexOf('</th></tr><!-- EOF Data Layer -->');
var dataLayer = html.substring(startPos + length, endPos);

//Getting the data headers
startPos = html.indexOf('<tr class="dataHeaders">');
length = ('<tr class="dataHeaders">').length;
endPos = html.indexOf('</tr><!-- EOF Data Headers -->');
var newString = html.substring(startPos + length, endPos);
newString = newString.replace(/<th>/g, '');
newString = newString.substring(0, newString.lastIndexOf('</th>'));
var featureInfoHeaders = new Array();
featureInfoHeaders = newString.split('</th>');

//Getting the data
startPos = html.indexOf('<!-- Data -->');
length = ('<!-- Data -->').length;
endPos = html.indexOf('<!-- End Data -->');
newString = html.substring(startPos + length, endPos);
newString = newString.substring(0, newString.lastIndexOf('</tr><!-- EOF Feature Info Data -->'));
var featureInfoData = new Array();
featureInfoData = newString.split('</tr><!-- EOF Feature Info Data -->');

for(var s = 0; s < featureInfoData.length; s++){
startPos = featureInfoData[s].indexOf('<!-- Feature Info Data -->');
length = ('<!-- Feature Info Data -->').length;
endPos = featureInfoData[s].lastIndexOf('</td>');
featureInfoData[s] = featureInfoData[s].substring(startPos + length, endPos);
featureInfoData[s] = featureInfoData[s].replace(/<td>/g, '');
featureInfoData[s] = featureInfoData[s].split('</td>');
}//end for

alert(featureInfoData);

//Put all the feature info in one array
var featureInfo = new Array();
var len = featureInfoData.length;
for(var j = 0; j < len; j++){
featureInfo[j] = new Object();
featureInfo[j].id = featureInfoData[j][0];
featureInfo[j].latitude = featureInfoData[j][1];
featureInfo[j].longitude = featureInfoData[j][2];
featureInfo[j].placeName = featureInfoData[j][3];
featureInfo[j].translation = featureInfoData[j][4];
}//end for

//This can be ignored for now...
var string = redesignHTML(featureInfoHeaders, featureInfo);
return string;

}//end parseHTML

因此,正如您所看到的,如果该字符串中的内容发生变化,我的代码将被严重破坏。我想尽可能避免这种情况并尝试编写更好的代码。我感谢你能给我的所有帮助和建议。

最佳答案

执行以下步骤:

  1. 创建一个新的documentFragment
  2. 将你的 HTML 字符串放入其中
  3. 使用选择器来获得你想要的东西

为什么所有的解析工作 - 这无论如何都不会工作,因为 HTML 是 not可通过 RegExp 解析 - 当您拥有最好的 HTML 解析器时? (浏览器)

关于javascript - 在 Javascript 中解析 HTML 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4247838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com