2011-01-14 7 views
3

Ich versuche, nur die oberste Ebene Text und keine der untergeordneten Text zu bekommen. So habe ich folgende xml:Wie bekomme ich nur den Textinhalt des Top-Level-Knotens mit getTextContent()

<job> 
    text1 
    <input> text2 </input> 
</job> 

und ich möchte nur den übergeordneten (text1) Text erhalten. So in diesem Beispiel würde ich

tun
node.getTextContent(); 

und text1 bekommen, nicht text1text2 die getTextContent zur Zeit mir gibt. Jetzt habe ich den Mann pages gelesen und ich weiß, dass sie sagen, getTextContent gibt die verkettete Zeichenfolge aller untergeordneten Elemente mit dem übergeordneten zurück. Aber ich würde nur den Text von den Eltern mögen. Eine andere Art, wie ich darüber nachdenke, war, zu versuchen, den Elternteil von den Kindern zu isolieren und den Befehl getTextContent nur für den Elternteil auszuführen, aber ich weiß nicht, wie machbar das ist.

Jede mögliche Hilfe

Danke, -Josh

Antwort

2

Iterate durch alle Kinder des Knotens erkannt werden, und diejenigen, die Textknoten verketten. Entweder das oder XPath.

+0

1+ rep für XPath. :) –

+0

Vielen Dank für die Antwort +1 – Grammin

2

Funktioniert getChildNodes()? Wenn dies der Fall ist, können Sie alle childNodes durchlaufen und getContent() für sie aufrufen und diese von Ihrem node.getContent() subtrahieren. Dies würde zu dem Text führen, der nicht Teil eines Unterknotens ist.

Beste Antwort: Text nicht mit Unterknoten mischen. Ich musste überprüfen, ob das von dir bereitgestellte XML legal ist, aber es macht mir Angst.

+0

ok krank halten Sie daran, danke +1 – Grammin

1

Ich denke, Sie könnten wahrscheinlich einen xpath von job/text() verwenden, das könnte einfacher sein als das DOM-Modell zu navigieren.

Wenn Sie können, gemischte Inhalte zu vermeiden, ist es ein bisschen ein Schmerz, mit zu arbeiten.

0

Wenn jemand Probleme damit hat, ist es am besten, alle untergeordneten Knoten des Knotens zu erhalten und dann den Knotentyp jedes untergeordneten Knotens zu erhalten. Wenn Sie einen Textknoten erhalten, rufen Sie getTextContent() auf diesem Knoten auf und los gehts!

2

Statt dieser

node.getTextContent(); 

Verwendung dieses:

if (node.getFirstNode() != null) 
{ 
    node.getFirstChild().getTextContent(); 
}