XML-Element wird nicht gefunden



  • ich versuche anhand des beispiels in der FAQ nun folgende Datei einzulesen Doch leider findet der meinen Element Size nicht.

    <?xml version="1.0" encoding="UTF-8"?>
    <kb:Config xmlns:kb="http://example.org/KB">
    <Size>100</Size>
    </kb:Config>

    _di_IXMLNodeList NodeList;
       _di_IXMLNode Node;
    
       NodeList = pXMLDoc->DocumentElement->ChildNodes;
       if (NodeList)
       {
          Node = NodeList->FindNode(L"Size");
          if (Node)
          {
    
          }
       }
    

    als Node ist immer Null. Wroan könnte das liegen?

    MfG



  • leider ist nicht so richtig ersichtlich ob "Size" eine DocumentElement->ChildNodes Node ist, da der hier gezeigte xml text nicht korrekt ist. Sollte es so sein, würde ich es so oder so ähnlich machen.

    nimm diese hier zum testen

    <?xml version="1.0" encoding="UTF-8"?>
    <DocumentElement>
    <Size>100</Size>
    </DocumentElement>

    Außerdem wird eine exeption ausgelößt, wenn Du das xml document auf active setzt und nicht beim laden der Datei.

    _di_IXMLNodeList NodeList = pXMLDoc->DocumentElement->ChildNodes; 
    
       if (NodeList) 
       { 
          if (NodeList->IndexOf((String)"Size") > -1) 
          { 
            _di_IXMLNode Node = NodeList->Nodes[(String)"Size"]; 
            AnsiString test = Node->Text;        
          } 
       }
    


  • warum ist meine xml Datei nicht koorekt. Ohne den Namensraum hat der MSValidierer die xml datei nicht correct zu meiner Grammatik erkannt.

    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:kb="http://example.org/KB"
    targetNamespace="http://example.org/KB">
    <xsd:element name="Config" type="kb:Config" />
    <xsd:simpleType name="TWord">
    <xsd:restriction base="xsd:integer">
    <xsd:minInclusive value="0" />
    <xsd:maxInclusive value="65535" />
    </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="Config">
    xsd:sequence
    <xsd:element name="Size" type="kb:TWord" />
    </xsd:sequence>
    </xsd:complexType>
    </xsd:schema>



  • maikhaenig schrieb:

    warum ist meine xml Datei nicht koorekt.

    was soll ich da sagen ? weil der gezeigte Ausschnitt kein korrektes xml-dokument ist.

    <?xml version="1.0" encoding="UTF-8"?>
    <kb:Config xmlns:kb="http://example.org/KB">
    <Size>100</Size>
    </kb:Config>



  • also ich habe jetzt folgende xml datei:

    <?xml version="1.0" encoding="UTF-8"?>

    <Config
    xsi:schemaLocation="http://www.test.de ReaderConfig1.xsd"
    xmlns="http://www.test.de"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Communication>
    <DeviceAddress>1</DeviceAddress>
    </Communication>
    </Config>

    und folgendes xsd Schema:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.test.de"
    targetNamespace="http://www.test.de"
    elementFormDefault="qualified">
    <xsd:element name="Config" type="TConfig" />

    <xsd:simpleType name="TByte">
    <xsd:restriction base="xsd:integer">
    <xsd:minInclusive value="0" />
    <xsd:maxInclusive value="255" />
    </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="TConfig">
    xsd:sequence
    <xsd:element name="Communication">
    xsd:complexType
    xsd:sequence
    <xsd:element name="DeviceAddress" type="TByte" />
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:schema>

    Diese Datei kann ich auch gut lesen unter Borland. Meine frage ist: Wenn ich diese Datei auch aus dem Borland erzeugen will, wie bekomme ich die erste Zeile hin ?

    <Config
    xsi:schemaLocation="http://www.test.de Config1.xsd"
    xmlns="http://www.test.de"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    MfG



  • achso ich habe schon

    pXML = new TXMLDocument("");
          pXML->Options = pXML->Options << doNodeAutoIndent;
          pXML->Active = true;
          pXML->Encoding = "UTF-8";
    
          pXML->DocumentElement = pXML->CreateElement("Config", "http://www.test.de");
    
          pXML->DocumentElement->AddChild("Communication");
          pXML->DocumentElement->ChildNodes->FindNode("Communication")->AddChild("DeviceAddress");
          pXML->DocumentElement->ChildNodes->FindNode("Communication")->ChildNodes->FindNode("DeviceAddress")->NodeValue = 1;
          pXML->SaveToFile("ConfigTest2.xml");
          delete pXML;
    

    dies gibt mir folgendes:

    <?xml version="1.0" encoding="UTF-8"?>
    <Config xmlns="http://www.test.de">
    <Communication>
    <DeviceAddress>1</DeviceAddress>
    </Communication>
    </Config>

    jetzt ist die frage wie bekomme ich die beiden zeilen:

    xsi:schemaLocation="http://www.test.de Config1.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    noch hinein

    MfG


Anmelden zum Antworten