C++ 读取XML文件

BOOL CXXDlg::GetXMLSingleValue(CString sPath,CString SN,CString &sResult,CString &sResult2,CString& sValue)

{

    CFileFind file;
    CString sFilePath,sFileName;
    BOOL bFind;

         sFileName = sPath+"\\CMLD_"+SN+"*.xml";
         bFind = file.FindFile(sFileName);
            if (bFind)
            {
                while (bFind)
                {
                    bFind=file.FindNextFile();//必须加这个才能得到找到文件的名字
                    if(!file.IsDirectory() && !file.IsDots() && !file.IsSystem ())  
                    {
                        sFilePath = file.GetFilePath();
                        CTime LastTime;
                        BOOL bResult = file.GetLastWriteTime(LastTime);
                    }
                }
            }
            else
            {
                SaveReportTxt(_T("未找到文件"));
                return FALSE;
            }   

       CComPtr<IXMLDOMDocument> spDoc; //DOM
        spDoc.CoCreateInstance(CLSID_DOMDocument);//
        VARIANT_BOOL vb;
        spDoc->load(CComVariant(sFilePath), &vb); //加载XML文件
        CComPtr<IXMLDOMElement> spRootEle;
        spDoc->get_documentElement(&spRootEle); //获取根节点
        if (!spRootEle)
        {
            SaveReportTxt(_T("无根节点"));
            return FALSE;
        }
        CComPtr<IXMLDOMNodeList> spNodeList;
        CComPtr<IXMLDOMNode> spNode;
        CComPtr<IXMLDOMNode> spNode2;  
        CComPtr<IXMLDOMNode> spNode3;
        CComVariant varVal;
        CComVariant varVal2;
        CString str;
        BSTR strBSTR;
            
        spRootEle->selectSingleNode(OLESTR("/TestResults/ResultSet/@siteCode"), &spNode3);   // 从根节点的子节点中选择名称为siteCode的节点
        spNode3->get_nodeValue(&varVal); //获取节点值                 //selectNodes("//TestResult")  从任意位置的节点中选择名称为 TestResult 的节点
        sResult = COLE2CT(varVal.bstrVal);

        spRootEle->selectSingleNode(OLESTR("/TestResults/ResultSet/TestResult/Outcome/@value"), &spNode); 
        spNode->get_nodeValue(&varVal2); //获取节点值
        sResult2 = COLE2CT(varVal2.bstrVal);

         //SelectNodes("//SubItemTest|//channel"),选择 SubItemTest 或 channel 节点。
        spRootEle->selectSingleNode(OLESTR("//SubItemTest[@name='WL_Get']"), &spNode2);   //选择拥有name="WL_Get"属性,名称为SubItemTest 的节点    
        if (spNode2 == 0x00)
        {
            SaveReportTxt("数据异常,更改日期再读取!");
            return FALSE;
        }
        spNode2->get_text(&strBSTR); //波长节点值
        str.Empty();
        str = strBSTR;
        sValue = str.Left(7);

       return TRUE;

}

#import "msxml4.dll"

main()

{

CString str1,str2,str3,str4,str5;

str1 = "E:\\路径\\"   \\ XML文件的路径,文件名、内容如下

str2= "131195J1362004455709";

bResult = GetXMLSingleValue(str1,str2,str3,str4,str5);

}

XML文件:文件名 CMLD_131195J1362004455709_SMARX1231-OC950-ZY_20210327115639_20210327115813.xml 

<TestResults xmlns="http://www.ieee.org/ATML/2007/TestResults" xmlns:n2="http://www.altova.com/samplexml/other-namespace" xmlns:c="http://www.ieee.org/ATML/2007/02/Common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<Personnel>

<SystemOperator ID="TEUSER188"/>

</Personnel>

<ResultSet ID="1" startDateTime="2021-03-27T11:56:39" endDateTime="2021-03-27T11:58:13" operationSequence="0" siteCode="MP2">

<Description>CMLD</Description>

<TestResult BoardFlag="0" ID="1">

<Outcome value="Passed"/>

</TestResult>

<ItemTest ID="1" name="OC950 C00-S-85C-COC POST BI" startDateTime="2021-03-27T11:56:39" endDateTime="2021-03-27T11:58:13">

<TestResult BoardFlag="0" ID="1" SerialNumber="131195J1362004455709" ValueFlag="0">

...

</TestResult>

<SubItemTest ID="1" name="MovePosition@Hisilicon LIV Test Position">

...

</SubItemTest>

<SubItemTest ID="2" name="GetCarrierID">

...

</SubItemTest>

<SubItemTest ID="3" name="GetSlotNum">

...

</SubItemTest>

<SubItemTest ID="4" name="Power Supply@On">

...

</SubItemTest>

<SubItemTest ID="5" name="BI_Set@Post BI">

...

</SubItemTest>

<SubItemTest ID="6" name="LIV">

...

</SubItemTest>

<SubItemTest ID="7" name="Leakage Current@pre test@LD">

...

</SubItemTest>

<SubItemTest ID="8" name="Ith_Get@Rough">

...

</SubItemTest>

<SubItemTest ID="9" name="Ith_Get@Precise">

...

</SubItemTest>

<SubItemTest ID="10" name="Ith_Get@Delta">

...

</SubItemTest>

<SubItemTest ID="11" name="Kink_Get">

...

</SubItemTest>

<SubItemTest ID="12" name="SE_Get">

...

</SubItemTest>

<SubItemTest ID="13" name="SE_Delta_Get">

...

</SubItemTest>

<SubItemTest ID="14" name="Power_Get@Ith-Precise">

...

</SubItemTest>

<SubItemTest ID="15" name="Power_Get@55">

...

</SubItemTest>

<SubItemTest ID="16" name="Power_Get@Delta">

...

</SubItemTest>

<SubItemTest ID="17" name="Ild_Max_Kink_Get">

...

</SubItemTest>

<SubItemTest ID="18" name="Vf@70">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>1.591600</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>1.000000:2.000000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="19" name="WL_Test@50">

...

</SubItemTest>

<SubItemTest ID="20" name="WL_Get">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>1316.248000</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>1314.275000:1318.020000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="21" name="WL_2nd Get">

...

</SubItemTest>

<SubItemTest ID="22" name="WL_Delta_Get">

...

</SubItemTest>

<SubItemTest ID="23" name="WL_Channel_Get">

...

</SubItemTest>

<SubItemTest ID="24" name="Mode_Hop Meas@OC950">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>NaN</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>1.000000:1.000000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="25" name="Mode_Hop Get@Step">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>0.388000</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>0.000000:1.200000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="26" name="ModeHop_SMSR_Get@Ith+5">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>40.949247</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>30.000000:70.000000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="27" name="ModeHop_SMSR_Get@40">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>47.549586</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>35.000000:70.000000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="28" name="ModeHop_SMSR_Get@50">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>49.315801</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>35.000000:70.000000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="29" name="ModeHop_SMSR_Get@60">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>50.104519</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>35.000000:70.000000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="30" name="ModeHop_20dbWidth_Get@Ith+5">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>0.105280</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NaN:NaN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="31" name="ModeHop_20dbWidth_Get@40">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>0.100758</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>0.000000:0.300000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="32" name="ModeHop_20dbWidth_Get@50">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>0.100272</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>0.000000:0.300000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="33" name="ModeHop_20dbWidth_Get@60">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>0.098847</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>0.000000:0.300000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="34" name="ModeHop_WL_Get@Ith+5">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>1315.356000</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NaN:NaN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="35" name="ModeHop_WL_Get@40">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>1315.744000</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>1314.275000:1318.020000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="36" name="ModeHop_WL_Get@50">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>1316.064000</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>1314.275000:1318.020000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="37" name="ModeHop_WL_Get@60">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>1316.424000</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>1314.275000:1318.020000</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="38" name="ModeHopIldList">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>25.450/40.000/50.000/60.000</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="39" name="ModeHopIldPowerList">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>1.969/7.290/10.801/14.040</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="40" name="RthemalVldList">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>1.180/1.311/1.401/1.490</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="41" name="RthemalPowerList">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>1.730/6.305/9.272/11.745</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="42" name="RthemalWLList">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>1315.356/1315.744/1316.064/1316.424</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="43" name="ThermalResistance">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>216.492</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="44" name="ThermalResistanceDelta">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>5.503</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="45" name="StationControlEnable">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>True</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="46" name="RetestEnable">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>False</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="47" name="ATEControlEnable">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>True</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="48" name="LD_ContactCheckVoltage">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>1.221</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="49" name="CouplingPower">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>-4.202</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="50" name="TimeControlEnable">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>True</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="51" name="MaxPower">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>22.816</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="52" name="ErrorItem">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>NULL</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="53" name="TotalTime">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>94.239</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="54" name="Temperature">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>95.000</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="55" name="Slope">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>-6182.000</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="56" name="Intercept">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>-0.001</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

<SubItemTest ID="57" name="AllowTestSequence">

<TestResult BoardFlag="0" ID="1" SerialNumber="NoCode">

<Outcome value="Passed"/>

<Description>ZY-PreBI/ZY-PostBI/ZY-Golden/26-PreBI/26-PostBI/26-Golden/26-Snap</Description>

<TestData>

<c:Datum xsi:type="c:string">

<c:Value>NAN:NAN</c:Value>

</c:Datum>

</TestData>

</TestResult>

</SubItemTest>

</ItemTest>

</ResultSet>

<TestProgram Productline="Optical Network" Product="Opti-Electronics Platform">

...

</TestProgram>

<TestStation AteName="SmarX1231A5120" AteVersion="V800R002Build667"/>

<UUT UutType="hardware">

...

</UUT>

<WorkOrder>

...

</WorkOrder>

</TestResults>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,可以使用第三方库来读取和解析XML文件,比如 `pugixml`。以下是使用 `pugixml` 库读取XML文件的示例代码: 首先,需要下载并安装 `pugixml` 库。可以从 https://pugixml.org/ 下载源代码,并将 `pugixml.hpp` 和 `pugixml.cpp` 文件添加到你的C++项目中。 接下来,可以使用以下示例代码来读取XML文件: ```cpp #include <iostream> #include "pugixml.hpp" int main() { pugi::xml_document doc; if (!doc.load_file("data.xml")) { std::cout << "Failed to load 'data.xml'" << std::endl; return 1; } // 获取根节点 pugi::xml_node root = doc.child("root"); // 遍历子节点 for (pugi::xml_node node = root.first_child(); node; node = node.next_sibling()) { std::cout << "Node name: " << node.name() << std::endl; // 获取节点属性 std::cout << "Attribute value: " << node.attribute("attribute_name").value() << std::endl; // 获取节点文本内容 std::cout << "Node value: " << node.child_value() << std::endl; // 获取子节点 pugi::xml_node childNode = node.child("child_node"); if (childNode) { // 处理子节点 } } return 0; } ``` 确保将 `data.xml` 替换为你要读取的实际XML文件的路径。使用 `load_file` 函数可以加载XML文件,然后可以使用 `child`、`attribute`、`child_value` 等函数来获取节点的名称、属性和文本内容。 请注意,上述示例假设你已经将 `pugixml.hpp` 和 `pugixml.cpp` 文件添加到你的项目中,并且已经正确配置了编译器和链接器,以便能够正确编译和运行代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值