2016-03-21 30 views
0
转换XML文件到HTML文件

我的要求是像下面,在网页中 2.解析使用XSL文件 3.上传的XML 1.上传一个XML文件显示的结果以HTML表在同一网页。使用XSL

但我不能做我的XML文件解析。我尝试了简单的XML文件,它的工作。 我的XML文件看起来像下面,

<?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> 

,我需要显示IssueDate,ContentTitleText,ContentKeysNotValidBefore,ContentKeysNotValidAfter,CompositionPlaylistId从这个XML内容。我使用[http://www.w3schools.com/xsl/xsl_client.asp][1]链接进行解析。但我无法在同一页面上传xml文件。

谁能帮我找出问题是什么? XSL文件,

<?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> 

而且没有错误消息,但该表具有从XML

+0

请[编辑]你的信息,包括预期的输出,XSLT样式表,并且您收到错误消息。没有这个问题是不能回答的。 –

+0

编辑该职位 –

+0

而且还有一个问题。当在浏览器中直接运行html文件时(以chrome的形式)(因此URL将以file:///开头),当控制输出时,内容为空我得到以下错误:** XMLHttpRequest无法加载file:/// home /saritha/workspace/parse-xml/test.xml。协议方案仅支持交叉源请求:http,data,chrome,chrome-extension,https,chrome-extension-resource。** –

回答

0

没有价值这是最有可能的一个命名空间的问题(like)。
对于第一次测试尝试删除默认的命名空间xmlns="http://www.smpte-ra.org/schemas/430-3/2006/ETM"形成你的XML。

如果这样做,但不应该是最终的解决方案,您需要添加名称空间的前缀到您的xslt xmlns:x="http://www.smpte-ra.org/schemas/430-3/2006/ETM"并在xpaht中使用此前缀。

例如:

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

更新:
请考虑KDMRequiredExtensions也有一个默认的命名空间(xmlns="http://www.smpte-ra.org/schemas/430-1/2006/KDM) 为此使用kdm:KDMRequiredExtensions

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

更新能源部在评论额外问题:
问:但是我们怎样才能确定这个名字空间可以用于这个元素呢?
每个XML节点可以有它自己的(新)的默认命名空间xmlns="/url/"。此名称空间不是用于此节点和任何子节点(但可以再次更改) 在您的示例中,ContentTitleText没有默认名称空间声明,因此来自父级的名称空间声明仍然有效。
在XSLT,你需要有一个为每个命名空间这个名称空间声明前缀和比你要使用这个前缀。

+0

它只适用于IssueDate其他只是空白 –

+0

当然,这只是一个例子。你需要相应地调整你所有的xpath –

+0

好的...因为我对此很陌生,但是我们怎样才能确定这个命名空间可以用于这个元素呢? –