当使用各种名称空间时,如何在XSL中获取XML内容



我正试图用XSLT从XML中获取一些信息。我面对的是一个XML(来自MediaInfo工具https://mediaarea.net/fr/MediaInfo)具有各种名称空间。我尝试了很多在这里找到的解决方案(有很多关于它的帖子(,但我没有找到正确的方法…我认为我的问题是由于命名空间。我的XSL命名空间可能与我想要的内容有关太多。

在下面的例子中,我简化了XML,我只是试图获得"的值;标题";

这是我的XML:

<?xml version="1.0" encoding="UTF-8"?>
<MediaInfo
xmlns="https://mediaarea.net/mediainfo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://mediaarea.net/mediainfo https://mediaarea.net/mediainfo/mediainfo_2_0.xsd"
version="2.0">
<creatingLibrary version="19.09" url="https://mediaarea.net/MediaInfo">MediaInfoLib</creatingLibrary>
<media ref="F:mediaaudioMadonna - Die Another Day.aif">
<track type="General">
<AudioCount>1</AudioCount>
<FileExtension>aif</FileExtension>
<Title>Die Another Day</Title>
<Album>American Life</Album>
<Track>1</Track>
<Performer>Madonna</Performer>
<Composer>Mirwais Ahmadzaï - Madonna</Composer>
<Genre>Pop</Genre>
<Comment>Die Another Day (soundtrack)</Comment>
</track>
<track type="Audio">
<Format>PCM</Format>
<Format_Settings_Endianness>Big</Format_Settings_Endianness>
<BitRate_Mode>CBR</BitRate_Mode>
<Channels>2</Channels>
<SamplingRate>48000</SamplingRate>
<BitDepth>24</BitDepth>
</track>
</media>
</MediaInfo>

和我的XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="https://mediaarea.net/mediainfo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://mediaarea.net/mediainfo https://mediaarea.net/mediainfo/mediainfo_2_0.xsd">
<xsl:output method="xml" encoding="UTF-8" indent="yes" version="1.0"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:variable name="Title">
<xsl:value-of select="MediaInfo/media/track[@type='General']/Title"/>
</xsl:variable> 
<xsl:element name="AUDIO" >
<xsl:element name="title">
<xsl:value-of select="$Title"/>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

我的输出是:

<AUDIO xmlns="https://mediaarea.net/mediainfo">
<title/>
</AUDIO>

我正在寻找:

<AUDIO xmlns="https://mediaarea.net/mediainfo">
<title>Die Another Day</title>
</AUDIO>

由于https://mediaarea.net/mediainfo是默认名称空间,因此应该将其绑定到前缀,并在XPaths中使用该前缀。

示例(我使用mi作为前缀。(…

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:mi="https://mediaarea.net/mediainfo"
exclude-result-prefixes="mi">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:element name="AUDIO" namespace="https://mediaarea.net/mediainfo">      
<xsl:element name="title" namespace="https://mediaarea.net/mediainfo">
<xsl:value-of select="mi:MediaInfo/mi:media/mi:track[@type='General']/mi:Title"/>
</xsl:element>
</xsl:element>
</xsl:template>

</xsl:stylesheet>

或者这个。。。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="https://mediaarea.net/mediainfo"
xmlns:mi="https://mediaarea.net/mediainfo"
exclude-result-prefixes="mi">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<AUDIO>      
<TITLE>
<xsl:value-of select="mi:MediaInfo/mi:media/mi:track[@type='General']/mi:Title"/>
</TITLE>
</AUDIO>
</xsl:template>

</xsl:stylesheet>

最新更新