javascript - 无法使用其属性获取 xml 元素的内部 HTML
问题描述
我有一个大的 xml 文件,内容如下:
<satellites>
<sat name="NSS 9/Yamal 300K (177.0W)" flags="0" position="-1770">
<transponder frequency="3792000" symbol_rate="2048000" polarization="1" fec_inner="2" system="1" modulation="1"/>
<transponder frequency="3987000" symbol_rate="8950000" polarization="1" fec_inner="2" system="0" modulation="1"/>
<transponder frequency="3999000" symbol_rate="2960000" polarization="1" fec_inner="3" system="0" modulation="1"/>
<transponder frequency="4055000" symbol_rate="11000000" polarization="0" fec_inner="1" system="1" modulation="1"/>
<transponder frequency="4099000" symbol_rate="30000000" polarization="1" fec_inner="7" system="1" modulation="1"/>
<transponder frequency="4163000" symbol_rate="2644000" polarization="1" fec_inner="3" system="1" modulation="1"/>
</sat>
<sat name="AMC 8/18 (139.0W)" flags="0" position="-1390">
<transponder frequency="4056000" symbol_rate="13250000" polarization="0" fec_inner="3" system="0" modulation="1"/>
</sat>
<sat name="AMC 10 (135.0W)" flags="0" position="-1350">
<transponder frequency="3780000" symbol_rate="30000000" polarization="0" fec_inner="3" system="1" modulation="2"/>
<transponder frequency="3820000" symbol_rate="29270000" polarization="0" fec_inner="3" system="0" modulation="1"/>
<transponder frequency="4080000" symbol_rate="29270000" polarization="1" fec_inner="3" system="0" modulation="1"/>
<transponder frequency="4136000" symbol_rate="19510000" polarization="0" fec_inner="3" system="0" modulation="1"/>
<transponder frequency="4149000" symbol_rate="9760000" polarization="0" fec_inner="3" system="0" modulation="1"/>
<transponder frequency="4180000" symbol_rate="29270000" polarization="0" fec_inner="5" system="0" modulation="1"/>
</sat>
</satellites>
我让用户选择卫星,然后我必须获得所选卫星的可用频率。我做了第一部分,但现在我无法通过它的属性获取sat
元素来显示转发器频率列表和其他信息。name
这是我的代码:var satellitesData = fileData.find('sat[name='+satName+']');
也试过这个:var satellitesData = $(fileData).find('sat[name='+satName+']');
这个:var satellitesData = fileData.find('sat[name='+satName+'] > transponder');
和这个:var satellitesData = fileData.find('sat[name='+satName+']').innerHTML;
没有任何效果。我究竟做错了什么?
解决方案
因为name
您要查找的属性经常包含空格,所以您需要用引号将搜索到的属性括起来,否则语法将无效。使用querySelector
而不是.find
与标准 Javascript 一起使用(.find
用于 jQuery,或用于纯 Javascript 数组,但不适用于 Javascript HTMLElements)。
const satName = "NSS 9/Yamal 300K (177.0W)";
const satellites = document.querySelector('satellites');
const satellitesData = satellites.querySelector('sat[name="' + satName + '"]');
console.log(satellitesData);
<satellites>
<sat name="NSS 9/Yamal 300K (177.0W)" flags="0" position="-1770">
<transponder frequency="3792000" symbol_rate="2048000" polarization="1" fec_inner="2" system="1" modulation="1" />
<transponder frequency="3987000" symbol_rate="8950000" polarization="1" fec_inner="2" system="0" modulation="1" />
<transponder frequency="3999000" symbol_rate="2960000" polarization="1" fec_inner="3" system="0" modulation="1" />
<transponder frequency="4055000" symbol_rate="11000000" polarization="0" fec_inner="1" system="1" modulation="1" />
<transponder frequency="4099000" symbol_rate="30000000" polarization="1" fec_inner="7" system="1" modulation="1" />
<transponder frequency="4163000" symbol_rate="2644000" polarization="1" fec_inner="3" system="1" modulation="1" />
</sat>
<sat name="AMC 8/18 (139.0W)" flags="0" position="-1390">
<transponder frequency="4056000" symbol_rate="13250000" polarization="0" fec_inner="3" system="0" modulation="1" />
</sat>
<sat name="AMC 10 (135.0W)" flags="0" position="-1350">
<transponder frequency="3780000" symbol_rate="30000000" polarization="0" fec_inner="3" system="1" modulation="2" />
<transponder frequency="3820000" symbol_rate="29270000" polarization="0" fec_inner="3" system="0" modulation="1" />
<transponder frequency="4080000" symbol_rate="29270000" polarization="1" fec_inner="3" system="0" modulation="1" />
<transponder frequency="4136000" symbol_rate="19510000" polarization="0" fec_inner="3" system="0" modulation="1" />
<transponder frequency="4149000" symbol_rate="9760000" polarization="0" fec_inner="3" system="0" modulation="1" />
<transponder frequency="4180000" symbol_rate="29270000" polarization="0" fec_inner="5" system="0" modulation="1" />
</sat>
</satellites>
您可能会考虑使用模板文字:
const satellitesData = satellites.querySelector(`sat[name="${satName}"]`);
推荐阅读
- python - 在 Python 3 中将文件内容写入文件时显示空白列表 [] [] [] []?
- jenkins - Jenkins 在没有 SCM 的情况下执行本地流水线脚本
- c++ - 不同cpu周期的相同指令
- unit-testing - 在 Vue.js 单元测试期间获取不正确的测试覆盖率
- node.js - 无法设置未定义的属性“imgId”
- python - garbage collection of shared data in multiprocessing via fork
- postgresql - postgresql 10.5 最适合的 hibernate.dialect 是什么?
- android - AndroidManifest.xml 备份按钮不起作用
- iccube - 迁移服务器 - 用户/密码和架构
- ruby-on-rails - Rails Carrierwave 添加更多文件未定义方法“标识符”