2011-01-05 7 views
2

Ich habe eine XSL-Datei erstellt, die ein XML-formatiertes Protokoll analysiert und eine HTML-Seite mit Informationen aus dem Protokoll generiert. In derselben XSL-Datei versuche ich XSL zu verwenden, um eine externe HTML-Datei einzuziehen, die eine Tabelle enthält, die ich anzeigen möchte. So wie es aussieht, kann ich die ganze Seite anzeigen, die die Tabelle enthält, aber ich kann die Tabelle nicht isolieren. Wie kann das gemacht werden? Derzeit kann ich in der gesamten Seite mit dem folgenden Code ziehen:Importieren einer HTML-Tabelle mit XSL

<xsl:copy-of select="document($tablePageUrl)" /> 

Aber ich verstehe nicht, wie der HTML-Körper zu durchqueren und eine Kopie der Tabelle herausziehen. Ein Beispiel, wie das HTML-Dokument formatiert ist (das Dokument ist die richtige XML, aber nicht die richtige HTML):

<html> 
<head> 
</head> 
<body> 
<table> 
    Table Contents 
</table> 
</body> 
</html> 

Antwort

2

Klingt wie Sie XPath verwenden, um ein bestimmtes Element in dem Dokument sollen.

Versuchen Sie so etwas wie:

<xsl:copy-of select="document($tablePageUrl)/html/body/table" /> 
+0

Ich hatte versucht, XPath zu verwenden, verwendete jedoch falsche Syntax. Danke für die Abklärung. – XBigTK13X

+5

Kein Problem.Das Verständnis von XPath ist wesentlich für die Verwendung von XSLT. –

-1
<xsl:variable name="source-html" select="document('url')" /> 

<xsl:value-of select="$source-html//table" /> 
+0

Ich kann immer noch nicht in der Tabelle mit dieser Methode ziehen. Wenn ich jedoch folgendes verwende: Das gesamte HTML-Dokument wird ordnungsgemäß importiert. Ich kann keine Möglichkeit finden, auf etwas anderes als das gesamte Dokument Bezug zu nehmen. – XBigTK13X

+0

1) ist Ihre HTML wohlgeformte XML? 2) Was bekommen Sie, wenn Sie verwenden? –

+0

Ich glaube nicht, dass Sie // aus dem Wurzelknoten verwenden können, muss es nicht ein Level sein? –

0

Von Kommentare:

Ich hatte versucht, mithilfe von XPath aber wurde mit falsche Syntax

Von http://www.w3.org/TR/xpath/#node-sets

Die Operatoren / und // bilden einen Ausdruck und eine relative Position Pfad. Es ist ein Fehler, wenn der Ausdruck nicht zu einem Knotensatz ausgewertet wird. Die / Bediener braucht Zusammensetzung in gleiche Weise wie bei / in einem Lokalisierungspfad verwendet wird

Insbesondere diese Syntax:

document($tablePageUrl)/html/body/table 

Nach der Produktion:

PathExpr ::= FilterExpr '/' RelativeLocationPath 

FilterExpr ::= PrimaryExpr 

PrimaryExpr ::= FunctionCall 
0

Überprüfen Sie, ob sich der HTML-Code in einem Namespace befindet. (Suchen Sie nach einem verräterischen xmlns = "....".) Ihr Beispiel befindet sich nicht in einem Namespace, aber wenn die Leute nicht wissen, dass Namespaces wichtig sind, entfernen sie oft die Namespace-Deklaration, wenn sie Beispiele veröffentlichen. Wenn sich die Elemente in einem Namespace befinden, muss der XPath-Ausdruck vorangestellte Namen verwenden, um sie auszuwählen.