简体   繁体   English

无法使用它的属性获取xml元素的内部HTML

[英]Can't get xml element's inner HTML using it's attribute

I have a large xml file with content like this: 我有一个大型的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>

I let the user choose the satellite, then I must get available frequencies for the chosen one. 我让用户选择卫星,然后我必须获得所选频率的可用频率。 The first part I did, but now I can't get the sat element by it's name attribute to display transponder frequency list and other information. 我做的第一部分,但现在我无法通过它的name属性获取sat元素来显示转发器频率列表和其他信息。

This is my code: var satellitesData = fileData.find('sat[name='+satName+']'); 这是我的代码: var satellitesData = fileData.find('sat[name='+satName+']');

Also tried this: var satellitesData = $(fileData).find('sat[name='+satName+']'); 还尝试了这个: var satellitesData = $(fileData).find('sat[name='+satName+']');

This: var satellitesData = fileData.find('sat[name='+satName+'] > transponder'); 这: var satellitesData = fileData.find('sat[name='+satName+'] > transponder');

And this: var satellitesData = fileData.find('sat[name='+satName+']').innerHTML; 这个: var satellitesData = fileData.find('sat[name='+satName+']').innerHTML;

Nothing works. 什么都行不通。 What am I doing wrong? 我究竟做错了什么?

Because the name attribute you're looking for often contains spaces, you need to enclose the searched attribute with quotes, otherwise the syntax will be invalid. 由于您要查找的name属性通常包含空格,因此需要使用引号将搜索的属性括起来,否则语法将无效。 Use querySelector rather than .find with standard Javascript ( .find is for jQuery, or for plain Javascript arrays, but not for Javascript HTMLElements). 使用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> 

You might consider a template literal: 您可以考虑模板文字:

const satellitesData = satellites.querySelector(`sat[name="${satName}"]`);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM