Knoten aus XML rauslösen und mit XSLT rendern / parsen

francosdad

Mitglied
Hallo,

obwohl ich mich mit der DOM Problematik unter Javascript ganz gut auskenne, steige ich bei folgendem Problem einfach nicht durch:

Als ersten den Code:

PHP:
// Das Stylesheet in ein Objekt laden
$xslDoc = new DOMDocument();
$xslDoc->load('AttributesXSL-19.xsl');
// Das Original XML in ein Objekt laden
$xmlDoc = new DOMDocument();
$xmlDoc->load('attributes.xml');
// Den entsprechenden Knoten suchen
$node = $xmlDoc->getElementById('3072');
// Ein neues (leeres) XML Objekt schaffen
$newXML = new DOMDocument();
$newXML->formatOutput = true;
$newXML->loadXML('<ebay></ebay>');
// Denn Knoten in das neue XML Objekt importieren
$node = $newXML->importNode($node);
// Den importierten Knoten als Kind einbinden
$newXML->documentElement->appendChild($node);
// Jetzt das ganze mit dem XSLT Processor verarbeiten
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
//echo $proc->transformToXML($newXML);

Das ganze wird leider mit folgendem Fehler belohnt:
Catchable fatal error: Argument 1 passed to DOMDocument::importNode() must be an instance of DOMNode, null given in ...

Vielen Dank für eure Hinweise.
Grüße Michael
 
Moin,

du kannst ein Element erst per getElementById() ansprechen, wenn du eine DTD ins XML eingebunden und das Dokument damit validiert hast, in welcher du definierst, welches Attribut als IDAttribute gelten soll.

Bei HTML-Dokumenten ist dies der Fall, in den (X)HTML-DTDs ist ID als IDAttribute notiert...weswegen es mit JS in einem HTML-Dokument auch funktioniert.

Ferner darf ein IDAttribute nicht mit einer Ziffer beginnen.
 
Ich bin davon ausgegangen, dass wenn "id" als Attribut direkt so vorkommt, es ausreichend ist um es so anzusprechen.

Hier mal ein kleiner Auszug aus der XML Datei (Das Original ist über 8MB groß):

HTML:
<Characteristics>
<CharacteristicsSet id='3072'  order='1' >
<DomainName><![CDATA[Fitnessernährung]]></DomainName>
<PresentationInstruction>
    <DomainName>Fitness Nutrition</DomainName>
    <Initial>
        <Row>
            <Widget type="normal">
                <Attribute align="left" id="47648" quadrant="top">
                    <Label align="left" color="#000000" face="Arial, Helvetica, Sans-Serif" size="2"/>
                    <Input type="dropdown"/>
                </Attribute>
            </Widget>
        </Row>
        <Row>
            <Widget type="normal">
                <Attribute align="left" id="23718" quadrant="top">
                    <Label align="left" color="#000000" face="Arial, Helvetica, Sans-Serif" size="2"/>
                    <Input type="dropdown"/>
                </Attribute>
            </Widget>
        </Row>
        <Row>
            <Widget type="normal">
                <Attribute align="left" id="47649" quadrant="top">
                    <Label align="left" color="#000000" face="Arial, Helvetica, Sans-Serif" size="2"/>
                    <Input type="dropdown"/>
                </Attribute>
            </Widget>
        </Row>
        <Row>
            <Widget type="normal">
                <Attribute align="left" id="47650" quadrant="top">
                    <Label align="left" color="#000000" face="Arial, Helvetica, Sans-Serif" size="2"/>
                    <Input type="dropdown"/>
                </Attribute>
            </Widget>
        </Row>
        <Row>
            <Widget type="normal">
                <Attribute align="left" helpId="1" id="10244" quadrant="top">
                    <Label align="left" color="#000000" face="Arial, Helvetica, Sans-Serif" size="2"/>
                    <Input type="dropdown"/>
                </Attribute>
            </Widget>
        </Row>
        <Row>
            <Widget type="normal">
                <Attribute align="left" id="47651" quadrant="top">
                    <Label align="left" color="#000000" face="Arial, Helvetica, Sans-Serif" size="2"/>
                    <Input columns="2" type="checkbox"/>
                </Attribute>
            </Widget>
        </Row>
    </Initial>
</PresentationInstruction>
<CharacteristicsList>
<Initial>
<Attribute labelVisible='true'  id='3801' >
<Label><![CDATA[SIFFTAS Group Pseudo Attribute]]></Label>
<Type><![CDATA[2]]></Type>
<EditType>0</EditType><ValueList count='2' >
<Value id='-10' >
<Name><![CDATA[-]]></Name>
</Value>

Und hier ist doch Attribute definiert: <CharacteristicsSet id='3072' order='1' >

Grüße
Michael
 
Ich bin davon ausgegangen, dass wenn "id" als Attribut direkt so vorkommt, es ausreichend ist um es so anzusprechen.

Mit der Annahme liegst du leider falsch, du musst dieses Attribute wie erwähnt in einer DTD festlegen.
Das Wörtchen ID ist dabei nebensächlich...bei (X)HTML ist es das IDAttribute, wonanders ist es ohne DTD garnichts.
Du kannst genausogut "kartoffelsuppe" als IDAttribute bestimmen :-)
 
Zurück