我的要求如下, 1.在网页中上传一个xml文件 2.使用xsl文件解析上传的xml 3.在同一网页的html表格中显示结果。
但是我无法使用我的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>
我需要在此xml中显示 IssueDate,ContentTitleText,ContentKeysNotValidBefore,ContentKeysNotValidAfter,CompositionPlaylistId 内容。我使用[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 :(得分:0)
这很可能是名称空间问题(like)
对于第一次测试,尝试从xml中删除默认命名空间xmlns="http://www.smpte-ra.org/schemas/430-3/2006/ETM"
。
如果这有效但不应该是最终解决方案,则需要在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" />
在评论中将doe更新为其他问题:
问:但我们怎样才能确定此命名空间可用于此元素?
每个xml节点都可以拥有自己的(新)默认命名空间xmlns="/url/"
。此命名空间用于此节点和任何子节点(但可以再次更改)
在您的示例中,ContentTitleText没有默认的命名空间声明,因此父级的声明仍然有效
在你的xslt中,你需要为每个命名空间创建一个带前缀的命名空间声明,而不是你必须使用这个前缀。