C: 如何创建默认格式的 XML 文件

标签 c xml api tinyxml

我是 XML 的初学者我有这些信息:

box1 -> name, colour, from

box2 -> name, weight

box3 -> name, colour, from, weight

我想做一个XML像这样的文件:

<boxName>name1
    <boxColour>colour1</boxColour>
    <boxFrom>from1</boxFrom>
</boxName>
<boxName>name2
    <boxColour>colour2</boxColour>
    <boxWeight>weight2</boxWeight>
</boxName>
<boxName>name3
    <boxColour>colour3</boxColour>
    <boxFrom>from3</boxFrom>
    <boxWeight>weight3</boxWeight>
</boxName>

我创建了我的 XML使用 TinyXml以这种形式:

TiXmlDocument doc;
TiXmlDeclaration* decl = new TiXmlDeclaration("1.0", "utf-8", "");
doc.LinkEndChild( decl );
TiXmlElement* element = new TiXmlElement("boxName");
doc.LinkEndChild(element);
TiXmlText* text = new TiXmlText("name1");
element->LinkEndChild(text);
TiXmlElement* element2 = new TiXmlElement("boxColour");
TiXmlElement* element3 = new TiXmlElement("boxFrom");
TiXmlText* text2 = new TiXmlText("colour1");
TiXmlText* text3 = new TiXmlText(from1);
element->LinkEndChild(element2);
element->LinkEndChild(element3);
element2->LinkEndChild(text2);
element3->LinkEndChild(text3);
doc.SaveFile( "XML.xml" );

但问题是盒子的数量是未知的,每个盒子可能有 1,2,3 或更多的 child ,但是每个盒子的格式和它的信息是相同的(如上所述)

请帮我制作XML文件

我正在用 C/API 编写代码

谢谢

更新:

我可以使用 for loop只是这种形式:

for(int i=0; i<3; i++)
{
    TiXmlElement* element2 = new TiXmlElement("element");
    TiXmlText* text2 = new TiXmlText("text");
    element->LinkEndChild(element2);
    element2->LinkEndChild(text2);
}

1:我不能说If one box have weight then use <boxWeight> tag and add <boxWeight>weight2</boxWeight> if not don't have <boxWeight></boxWeight> tag

2:我在这种形式的缓冲区中有框信息:

box1 name:name1 coloure: coloure1 from: from1不知道如何拆分信息(C/API)

最佳答案

我在大多数地方看到的标准做法是使用一个说明可接受格式的架构文件(XSD 文件)。

<xs:element name="boxName" maxOccurs="unbounded">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Colour" type="xs:myStringType"  minOccurs="0"/>
                <xs:element name="From" type="xs:date"  minOccurs="0"/>
                <xs:element name="Weight" type="xs:int" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

minOccurs 表示“这个元素是可选的”

maxOccurs="unbounded" 表示“尽可能多”

然后您将进行检查以确保任何 XML 都符合此架构。

然后您可以轻松地使用 for 循环:

// pseudo-code
for each box,
    if colour variable exists, create and add colour element
    if weight variable exists, create and add weight element
    if from variable exists, create and add from element

关于C: 如何创建默认格式的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30071446/

相关文章:

csv行解析,在末尾打印额外的行

C 缓冲区转换为 int

c - scanf ("%[^:]]", word) 如何在 C 中工作

Java:打开 Jar 内的 xml 文件。打不开

xml - XML 和 XSD 有什么区别?

c - 为什么没有类型转换警告?

java - 移动项目文件夹后应用程序崩溃 android studio

php - 使用 PHP 通过 WhatsApp API 发送消息

api - 使用远程API时处理错误

java - Jackson 无法序列化 Joda DateTimeFormatter