我正试图用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>