C++ 使用C++;

C++ 使用C++;,c++,xml,C++,Xml,我的XML文件有: XML元数据 我正在这个文件中搜索一个标记,开始标记和结束标记之间的文本必须打印在控制台上。i、 e.在这种情况下,我希望在控制台上打印xmlMetadata。同样,如果它在同一文件中遇到另一个标记,它应该在文件中进一步打印 这是我的代码,但它正在打印整个文件的内容: { string line="< Package >"; ifstream myfile (xmlFileName); //xmlFileName is xml file in

我的XML文件有:

XML元数据

我正在这个文件中搜索一个标记,开始标记和结束标记之间的文本必须打印在控制台上。i、 e.在这种情况下,我希望在控制台上打印xmlMetadata。同样,如果它在同一文件中遇到另一个标记,它应该在文件中进一步打印

这是我的代码,但它正在打印整个文件的内容:

{
    string line="< Package >";
    ifstream myfile (xmlFileName); //xmlFileName is xml file in which search is to done
    if (myfile.is_open())
    {
    while ( myfile.good() )
    {
      getline (myfile,line);
      std::cout<<line<< endl;
    }
    myfile.close();
    }
    else cout << "Unable to open file"; 
}
{
字符串行=“”;
ifstream myfile(xmlFileName);//xmlFileName是要进行搜索的xml文件
如果(myfile.is_open())
{
while(myfile.good())
{
getline(myfile,line);
标准::cout



XML元数据

xmlMetadata.h
C:\Dependency\xmlMetadata\xmlMetadata.h xmlMetadata.cpp C:\Dependency\xmlMetadata\xmlMetadata.cpp
xmlMetadata1
xmlmata1.h
C:\Dependency\xmlMetadata\xmlmata1.h xmlMetadata1.cpp C:\Dependency\xmlmata\xmlmata1.cpp

Getline不搜索行,它只是将每行读入变量“line”,然后您必须在该“line”中搜索所需的文本

   size_t found=line.find("Package");
   if (found!=std::string::npos) {
       cout << line;
size\u t found=line.find(“包”);
如果(找到!=std::string::npos){

cout一个文件上的一行标记很难描述为XML。无论如何,如果您真的想解析XML文件,那么使用解析器库可以轻松地完成这项工作,例如。是一个很好的资源

下面的代码是我尝试读取以下XML的代码(是的,XML文件必须有头):

文件:demo.xml

<?xml version="1.0" encoding="utf-8"?>
<rootnode version="1.0" type="example">
    <Package> xmlMetadata </Package>
</rootnode>
<? xml version="1.0" ?>
<fileStructure>
<Main_Package>
   File_Navigate
</Main_Package>
<Dependency_Details>

<Dependency>
   <Package>
      xmlMetadata
   </Package>
   <Header>
      xmlMetadata.h
   </Header>
   <Header_path>
      C:\Dependency\xmlMetadata\xmlMetadata.h
   </Header_path>
   <Implementation>
      xmlMetadata.cpp
   </Implementation>
   <Implementation_path>
      C:\Dependency\xmlMetadata\xmlMetadata.cpp
   </Implementation_path>
</Dependency>

<Dependency>
   <Package>
      xmlMetadata1
   </Package>
   <Header>
      xmlMetadata1.h
   </Header>
   <Header_path>
      C:\Dependency\xmlMetadata\xmlMetadata1.h
   </Header_path>
   <Implementation>
      xmlMetadata1.cpp
   </Implementation>
   <Implementation_path>
      C:\Dependency\xmlMetadata\xmlMetadata1.cpp
   </Implementation_path>
</Dependency>

</Dependency_Details>
</fileStructure>
输出:

xmlMetadata
xmlMetadata1

xmlMetadata

这不是解析XML文件的方式,但由于您不想使用解析器库,因此此代码可能会帮助您开始

文件:demo.xml

<?xml version="1.0" encoding="utf-8"?>
<rootnode version="1.0" type="example">
    <Package> xmlMetadata </Package>
</rootnode>
<? xml version="1.0" ?>
<fileStructure>
<Main_Package>
   File_Navigate
</Main_Package>
<Dependency_Details>

<Dependency>
   <Package>
      xmlMetadata
   </Package>
   <Header>
      xmlMetadata.h
   </Header>
   <Header_path>
      C:\Dependency\xmlMetadata\xmlMetadata.h
   </Header_path>
   <Implementation>
      xmlMetadata.cpp
   </Implementation>
   <Implementation_path>
      C:\Dependency\xmlMetadata\xmlMetadata.cpp
   </Implementation_path>
</Dependency>

<Dependency>
   <Package>
      xmlMetadata1
   </Package>
   <Header>
      xmlMetadata1.h
   </Header>
   <Header_path>
      C:\Dependency\xmlMetadata\xmlMetadata1.h
   </Header_path>
   <Implementation>
      xmlMetadata1.cpp
   </Implementation>
   <Implementation_path>
      C:\Dependency\xmlMetadata\xmlMetadata1.cpp
   </Implementation_path>
</Dependency>

</Dependency_Details>
</fileStructure>

谢谢Martin,我尝试了上面的方法,但是它在命令行上返回了我的“Package”。我想要后面的文本,我现在正在尝试使用substr()来处理它.嘿,卡尔,谢谢你的帮助。但实际上我不能在这个程序中使用任何构建模块/解析器,如Rapidxml或Tinyxml。我需要自己的。而且xml不是一个标记xml,它有很多标记…我在这里显示它并不是为了让我的查询更简单。:)好的,让我指出一些明显的东西,可以帮助你解析它tring:标签上没有空格!
应该是
。明白了吗?是的,我在使用它时没有空格,但是如果我以相同的方式在这里发布它,那么它就不会显示为标签…所以我在两个标签之间包含空格…这只是因为你没有正确地格式化代码。我编辑了你的帖子,为你做了。我决定了我想把这段代码留在这里,因为它可以工作。其他人可能会发现这种方法很有用。
xmlMetadata
xmlMetadata1