gpt4 book ai didi

c++ - tinyxml 解析xml文件

转载 作者:行者123 更新时间:2023-11-28 06:31:11 29 4
gpt4 key购买 nike

我有一个这样的 xml 文件:

<?xml version="1.0"?>

<ApplicationSettings>
<BeamGeometry
Dimension="2"
Type="fan"
Shape="arc"
LengthFocalPointToISOCenter="558"
LengthISOCenterToDetector="394"
LengthDetectorSeperation="0.98"
LengthModuleSeperation="0.04"
NumberModules="57"
NumberDetectorsPerModule="16"
NumberISOCenterShift="3.25" />
</ApplicationSettings>

我想使用 tinyxml 根据条目名称(例如 (LengthFocalPointToISOCenter))检索所有值(例如 558)。这是我的代码,还没有成功。

int SetFanbeamGeometry(const char* filename)    
{
int ret = TRUE;

TiXmlDocument doc("E:\\Projects\\iterativeRecon\\ProjectPackage\\ApplicationSettings\\ApplicationSettings.xml");

int LengthFocalPointToISOCenter;

if( doc.LoadFile())
{

TiXmlHandle hDoc(&doc);
TiXmlElement *pRoot, *pParm;
pRoot = doc.FirstChildElement("ApplicationSettings");
if(pRoot)
{
pParm = pRoot->FirstChildElement("BeamGeometry");
int i = 0; // for sorting the entries
while(pParm)
{
pParm = pParm->NextSiblingElement("BeamGeometry");
i++;
}
}
}
else
{
printf("Warning: ApplicationSettings is not loaded!");
ret = FALSE;
}

return ret;
}

我想知道如何使用 tinyxml 来做到这一点?对不起,我是第一次使用。这让我感到困惑。谢谢。

最佳答案

您显示的片段中只有一个 BeamGeometry 子元素;您尝试访问的信息是它的属性 - 它们不是单独的元素。

所以你需要这样的东西:

// ...
pParm = pRoot->FirstChildElement("BeamGeometry");
if (pParm)
{
const char* pAttr = pParm->Attribute("LengthFocalPointToISOCenter");
if (pAttr)
{
int iLengthFocalPointToISOCenter = strtoul(pAttr, NULL, 10);
// do something with the value
}
}

如果你想遍历所有的属性,很简单:

const TiXmlAttribute* pAttr = pParm->FirstAttribute();
while (pAttr)
{
const char* name = pAttr->Name(); // attribute name
const char* value = pAttr->Value(); // attribute value
// do something
pAttr = pAttr->Next();
}

关于c++ - tinyxml 解析xml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27535590/

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