这是 xml
<?xml version="1.0"?>
<CFaveDefn-v000 Description="Favourite definitions, Default group" Created="18-Apr-2024 14:49">
<Defn>
<Display m_display.contrast.bEnabled="true" m_display.contrast.nLow="-138" m_display.contrast.nHigh="-80" m_display.scale.bEnabled="true" m_display.scale.nLow="-151" m_display.scale.nHigh="-42" m_display.bEnabled="true" m_display.bSmallIcon="true" m_display.n64FreqLow="2801644" m_display.nBandwidth="63913" />
<Radio m_radio.bEnabled="false" m_radio.n64FreqLow="2801644" m_radio.nBandwidth="63913" />
<Flags m_flags.bDefault="false" />
<Name m_name.strGroup="-- UNKNOWN" m_name.strFolder="MIL-STD 188-141 - ALE" m_name.strTitle="2.835,000 ALE LSB unk-tx TIS:K01 TO:K13 +110" />
<RX m_rx.nActive="0" m_rx.anEnabled="1" m_rx.astrDemod_count="1" m_rx.astrDemod_value_0="<CDSPDemodRX-v000><Audio m_audio.bASIO="false" m_audio.bEnable="true" m_audio.nLevel="100" m_audio.nDevice="-1" m_audio.nChannels="0" m_audio.szDevice="Default"/><Freq m_freq.n64RX="2835000" m_freq.n64TX="10000000" m_freq.n64RXOffset="0"/><Mode m_mode.nMode="0"/><Main m_main.nID="0" m_main.bTX="false" m_main.bLock_0="false"/><Filter m_filter.nLow="100" m_filter.nHigh="2700" m_filter.nTaps="257" m_filter.nWindowing="3"/><AGC m_agc.nAGC="1" m_agc.levels_0.nDecay="0" m_agc.levels_0.nGain="40" m_agc.levels_0.nHang="0" m_agc.levels_0.nKnee="0" m_agc.levels_0.nSlope="0" m_agc.levels_1.nDecay="250" m_agc.levels_1.nGain="0" m_agc.levels_1.nHang="100" m_agc.levels_1.nKnee="-130" m_agc.levels_1.nSlope="6" m_agc.levels_2.nDecay="500" m_agc.levels_2.nGain="0" m_agc.levels_2.nHang="250" m_agc.levels_2.nKnee="-130" m_agc.levels_2.nSlope="6" m_agc.levels_3.nDecay="1000" m_agc.levels_3.nGain="0" m_agc.levels_3.nHang="500" m_agc.levels_3.nKnee="-130" m_agc.levels_3.nSlope="6"/><CW m_cw.bEnable="false" m_cw.nLevel="48"/><NB m_nb.bEnable="false" m_nb.nThreshold="50" m_nb.nWidth="50"/><NR m_nr.bEnable="false" m_nr.nMethod="0" m_nr.nLMSThreshold="50" m_nr.nRRNoise1="5" m_nr.nLMSWidth="50" m_nr.nLMSLevel="10" m_nr.nSpectralReduction_0="3" m_nr.nSpectralThreshold_0="10" m_nr.nSpectralRescale_0="2" m_nr.cleanup.nBins="0" m_nr.cleanup.nMultiply="0" m_nr.cleanup.nSquelch="0" m_nr.cleanup.nLevel="0" m_nr.cleanup.nWidth="0" m_nr.cleanup.bPCS="0" m_nr.cleanup.bSquelch="0"/><Notch m_notch.bEnable="false" m_notch.nLevel="50"/><Squelch m_squelch.fm.hWnd="69082" m_squelch.fm.nMsg="50078" m_squelch.fm.bAuto="false" m_squelch.fm.bCTCSS="false" m_squelch.fm.bEnable="false" m_squelch.fm.nCTCSSTone="67000" m_squelch.fm.nCTCSSLevel="5" m_squelch.fm.nLevel="2" m_squelch.vad.bEnable="false" m_squelch.vad.nCache="25" m_squelch.vad.nLevel="25" m_squelch.vad.nHang="250"/></CDSPDemodRX-v000>" />
<TX m_tx.strMod="" />
</Defn>
</CFaveDefn-v000>
我有一个 xml 文档,其中包含名为“RX”的多个数据。 到目前为止,我只能读取“RX”中的第一个名称,即“m_rx.nActive”,其值为“0”。
我需要读取2个数据:
你能帮我解决这个问题吗?
非常感谢 雷蒙德
Dim xmlToTxt As XmlReader = XmlReader.Create(文件名) '
Do While xmlToTxt.Read()
If xmlToTxt.NodeType = XmlNodeType.Element AndAlso xmlToTxt.Name = "RX" Then
MsgBox(xmlToTxt.GetAttribute(0) & " <>") 'm_rx.nActivate="0" i can read
End If
Loop
尝试以下powershell脚本(可以转换为VBnet)
using assembly System.Xml.Linq
$filename = 'c:\temp\test.xml'
$doc = [System.Xml.Linq.XDocument]::Load($filename)
$defn = $doc.Descendants('Defn') | foreach({[System.Xml.Linq.XElement]$_})
$defs = @{}
foreach($def in $defn[0].Elements())
{
foreach($attr in $def.Attributes())
{
if($attr.Value.StartsWith('<'))
{
$element = [System.Xml.Linq.Xelement]::Parse($attr.Value)
foreach($ele in $element.Elements())
{
$defs[$ele.Name.LocalName] = $ele.Value
}
}
else `
{
$defs[$attr.Name.LocalName] = $attr.Value
}
}
}
$defs
结果
Name Value
---- -----
m_display.scale.bEnabled true
NB
NR
Notch
m_rx.nActive 0
m_name.strTitle 2.835,000 ALE LSB unk-tx TIS:K01 TO:K13 +110
Main
m_display.bEnabled true
m_display.contrast.bEnabled true
m_radio.bEnabled false
m_display.contrast.nHigh -80
AGC
m_tx.strMod
m_display.n64FreqLow 2801644
Freq
m_name.strFolder MIL-STD 188-141 - ALE
m_radio.nBandwidth 63913
m_name.strGroup -- UNKNOWN
m_display.nBandwidth 63913
m_display.bSmallIcon true
m_rx.astrDemod_count 1
m_radio.n64FreqLow 2801644
Audio
Filter
m_flags.bDefault false
m_display.scale.nLow -151
m_display.contrast.nLow -138
m_rx.anEnabled 1
Squelch
CW
Mode
m_display.scale.nHigh -42
请尝试以下基于 LINQ to XML API 的解决方案。自 2007 年以来,它在 .Net Framework 中可用。
VB.NET
Sub Main
Const FILENAME As String = "e:\Temp\Raimund.xml"
Dim xdoc As XDocument = XDocument.Load(FILENAME)
Dim m_rx As XAttribute = xdoc.Descendants("RX").FirstOrDefault().Attribute("m_rx.astrDemod_value_0")
Dim rx As XElement = XElement.Parse(m_rx.Value)
Console.WriteLine("Freq='{0}', Mode='{1}'", _
rx.Descendants("Freq").SingleOrDefault().Attribute("m_freq.n64RX").Value, _
rx.Descendants("Mode").SingleOrDefault().Attribute("m_mode.nMode").Value)
End Sub
输出
Freq='2835000', Mode='0'