2016-03-21 3 views
0

ist Meine Forderung wie die folgenden, 1. Laden Sie eine XML-Datei in einer Webseite 2. Parse die hochgeladen xml xsl Datei 3. Verwendung zeigen das Ergebnis in HTML-Tabelle in der gleichen Website.zu HTML-Datei Transformieren von XML-Datei XSL

Aber ich konnte das Parsen mit meiner XML-Datei nicht tun. Ich versuchte es mit einer einfachen XML-Datei und es funktionierte. Und meine XML-Datei wie folgt aussehen würde,

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
<DCinemaSecurityMessage xmlns="http://www.smpte-ra.org/schemas/430-3/2006/ETM" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:enc="http://www.w3.org/2001/04/xmlenc#"> 
    <AuthenticatedPublic Id="ID_AuthenticatedPublic"> 
     <MessageId>urn:uuid:3963b8fc-e989-4be2-a5d4-139d8561643c</MessageId> 
     <MessageType>http://www.smpte-ra.org/430-1/2006/KDM#kdm-key-type</MessageType> 
     <AnnotationText>NBS</AnnotationText> 
     <IssueDate>2016-02-25T17:43:29-00:00</IssueDate> 
     <Signer> 
     <ds:X509IssuerName xmlns:ds="http://www.w3.org/2000/09/xmldsig#">dnQualifier=vV59D4u5w9rnFOyDPugA9tpTE7Y=,OU=.Signature.DC.CA.DVS,O=.DC.CA.DVS,CN=.ClipsterDCI.Signature </ds:X509IssuerName> 
     <ds:X509SerialNumber xmlns:ds="http://www.w3.org/2000/09/xmldsig#">139130018</ds:X509SerialNumber> 
     </Signer> 
     <RequiredExtensions> 
     <KDMRequiredExtensions xmlns="http://www.smpte-ra.org/schemas/430-1/2006/KDM"> 
      <Recipient><X509IssuerSerial><ds:X509IssuerName xmlns:ds="http://www.w3.org/2000/09/xmldsig#">dnQualifier=vUlg/0Tl/y5rXEFbSb7xF76F/2U=,CN=.DC.DOLPHIN.DC2.SMPTE,OU=DC.DOREMILABS.COM,O=DC2.SMPTE.DOREMILABS.COM</ds:X509IssuerName><ds:X509SerialNumber xmlns:ds="http://www.w3.org/2000/09/xmldsig#">25149</ds:X509SerialNumber></X509IssuerSerial><X509SubjectName>dnQualifier=ejcAIJ/TlzuipjwSFRTGhPT/8go=,CN=LE SPB MD SM.DCP2000-200007-03.DC.DC2.SMPTE,OU=DC.DOREMILABS.COM,O=DC2.SMPTE.DOREMILABS.COM</X509SubjectName> 
      </Recipient> 
      <CompositionPlaylistId>urn:uuid:16e5f6c6-89b5-4c0e-a01d-79dcdf792daa</CompositionPlaylistId> 
      <ContentTitleText>American_Pastoral_FTR-3-Temp_S_EN-XX_OV_20_2K_LS_20160218_NBS_IOP_OV</ContentTitleText> 
      <ContentKeysNotValidBefore>2016-02-25T20:00:00-00:00</ContentKeysNotValidBefore> 
      <ContentKeysNotValidAfter>2016-02-25T21:00:00-00:00</ContentKeysNotValidAfter> 
      <AuthorizedDeviceInfo> 
       <DeviceListIdentifier>urn:uuid:6fb7b1ef-1086-49b7-9f98-02333006fdfa</DeviceListIdentifier> 
       <DeviceList><CertificateThumbprint>2jmj7l5rSw0yVb/vlWAYkK/YBwk=</CertificateThumbprint></DeviceList> 
      </AuthorizedDeviceInfo> 
      <KeyIdList><TypedKeyId><KeyType>MDIK</KeyType><KeyId>urn:uuid:ac20730a-7172-4f5e-9f90-f9b8aac31a90</KeyId></TypedKeyId><TypedKeyId><KeyType>MDAK</KeyType><KeyId>urn:uuid:d93306ef-b0f8-43cc-adfd-ac534cdf8412</KeyId></TypedKeyId></KeyIdList> 
     </KDMRequiredExtensions> 
    </RequiredExtensions><NonCriticalExtensions/> 
    </AuthenticatedPublic> 
    </DCinemaSecurityMessage> 

Und ich brauche Issue, ContentTitleText, ContentKeysNotValidBefore, ContentKeysNotValidAfter, CompositionPlaylistId Inhalt dieser xml anzuzeigen. Und ich habe [http://www.w3schools.com/xsl/xsl_client.asp][1] Link zum Parsen verwendet. Aber ich konnte es nicht mit dem Hochladen von XML-Datei auf der gleichen Seite tun.

Kann mir jemand helfen, herauszufinden, was das Problem ist? XSL-Datei,

<?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:enc="http://www.w3.org/2001/04/xmlenc#" xmlns:kdm="http://www.smpte-ra.org/schemas/430-1/2006/KDM" > 
    <xsl:template match="/"> 
    <html> 
     <body> 
     <h2>Parsed Data</h2> 
     <table border="1"> 
      <tr bgcolor="#9acd32"> 
      <th>Title</th> 
      <th>Created Date</th> 
      <th>Valid from</th> 
      <th>Valid to</th> 
      <th>UUID</th> 
      </tr> 
      <tr> 
      <td><xsl:value-of select="/DCinemaSecurityMessage/AuthenticatedPublic/RequiredExtensions/KDMRequiredExtensions/ContentTitleText" /></td> 
      <td><xsl:value-of select="/DCinemaSecurityMessage/AuthenticatedPublic/IssueDate" /></td> 
      <td><xsl:value-of select="/DCinemaSecurityMessage/AuthenticatedPublic/RequiredExtensions/KDMRequiredExtensions/ContentKeysNotValidBefore" /></td> 
      <td><xsl:value-of select="/DCinemaSecurityMessage/AuthenticatedPublic/RequiredExtensions/KDMRequiredExtensions/ContentKeysNotValidAfter" /></td> 
      <td><xsl:value-of select="/DCinemaSecurityMessage/AuthenticatedPublic/RequiredExtensions/KDMRequiredExtensions/CompositionPlaylistId" /></td> 
     </tr> 
     </table> 
    </body> 
    </html> 
    </xsl:template> 
    </xsl:stylesheet> 

Und es gibt keine Fehlermeldung, aber die Tabelle hat keine Werte aus dem XML-

+0

Bitte bearbeiten Sie Ihren Beitrag und fügen Sie die erwartete Ausgabe, das XSLT-Stylesheet und die Fehlermeldung hinzu, die Sie erhalten. Ohne das ist die Frage nicht zu verantworten. –

+0

Bearbeitete den Beitrag –

+0

Und habe noch ein Problem damit. Wenn die HTML-Datei direkt im Browser (in Chrome) ausgeführt wird (so startet die URL wie file: ///), ist der Inhalt leer, wenn ich die folgende Fehlermeldung bekomme: ** XMLHttpRequest kann Datei: /// home nicht laden /saritha/workspace/parse-xml/test.xml. Cross-Ursprungsanforderungen werden nur für Protokollschemas unterstützt: http, data, chrome, chrome-extension, https, chrome-extension-resource.** –

Antwort

0

Dies ist höchstwahrscheinlich eine Namespace Ausgabe (like).
Versuchen Sie für einen ersten Test, den Standard-Namespace xmlns="http://www.smpte-ra.org/schemas/430-3/2006/ETM" aus Ihrem XML-Code zu entfernen.

Wenn dies funktioniert, soll aber nicht die endgültige Lösung sein, Sie müssen den Namespace mit einem Präfix zu Ihrem Xslt xmlns:x="http://www.smpte-ra.org/schemas/430-3/2006/ETM" und verwenden diesen Präfix in Ihrem xpaht hinzuzufügen.

Zum Beispiel:

<td> 
    <xsl:value-of 
     select="/x:DCinemaSecurityMessage/x:AuthenticatedPublic/x:IssueDate" /> 
</td> 

Update:
Bitte beachten Sie, dass KDMRequiredExtensions hat auch einen Standard-Namespace (xmlns="http://www.smpte-ra.org/schemas/430-1/2006/KDM) Dafür kdm:KDMRequiredExtensions

<xsl:value-of 
      select="/x:DCinemaSecurityMessage 
      /x:AuthenticatedPublic 
      /x:RequiredExtensions 
      /kdm:KDMRequiredExtensions 
      /kdm:ContentTitleText" /> 

aktualisieren doe, um zusätzliche Frage in Kommentar verwenden :
F: Aber wie können wir identifizieren, dass dieser Namespace für dieses Element verwendet werden kann?
Jeder XML-Knoten kann seinen eigenen (neuen) Standardnamespace xmlns="/url/" haben. Dieser Namespace wird dann für diesen Knoten und alle untergeordneten Knoten verwendet (könnte aber wieder geändert werden). In Ihrem Beispiel hat ContentTitleText keine Standard-Namespace-Deklaration, daher ist die vom übergeordneten Element immer noch gültig.
In Ihrer XSLT müssen Sie für jeden dieser Namespaces eine Namespace-Deklaration mit Präfix haben und dann dieses Präfix verwenden.

+0

Es funktionierte nur für IssueDate andere einfach leer –

+0

Natürlich ist dies nur ein Beispiel. Sie müssen alle Sie xpath entsprechend anpassen –

+0

Ok ... Da bin ich neu, aber wie können wir diesen Namensraum für dieses Element verwendet werden? –

Verwandte Themen