私はこの質問が多くの時間を要請されていることを知っていますが、それらを読んだ後でも私はこの問題を解決することができません。Xパスの解析:要素の接頭辞はバインドされていません
質問:1つのノード(GivenName)が名前空間(mpeg7)で定義され、ルート要素の先頭に宣言されているXMLが1つあります。 xpath式(// EpisodeOf/@ crid)を使用してjavax xpathを使用して属性を解析したいとします。ちょうど私がこのGivenNameノードをxmlから削除するときにコードをクリアするだけです。
XML:(Kotlinで)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TVAMain xmlns="urn:tva:metadata:2010" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mpeg7="urn:tva:mpeg7:2008" publicationTime="2017-12-09T08:14:32Z" publisher="Gracenote, Inc." version="1"
xml:lang="EN"
xsi:schemaLocation="urn:tva:metadata:2010
http://developer.tmsapi.com/files/tva_metadata_3-1_v161.xsd
urn:tva:mpeg7:2008
http://developer.tmsapi.com/files/tva_mpeg7_2008.xsd">
<ProgramDescription>
<ProgramInformationTable>
<ProgramInformation fragmentId="416885331" programId="someid">
<BasicDescription>
<CreditsList>
<CreditsItem role="urn:mpeg:cs:RoleCS:2010:HOST" index="1">
<PersonName xml:lang="EN">
<mpeg7:GivenName xml:lang="EN">Azeb</mpeg7:GivenName>
</PersonName>
</CreditsItem>
</CreditsList>
<EpisodeOf type="Series" index="428" crid="crid://gn.tv/185326/SH000"/>
</BasicDescription>
</ProgramInformation>
</ProgramInformationTable>
</ProgramDescription>
</TVAMain>
コード:xpath.evaluate機能の
val xpath = XPathFactory.newInstance().newXPath()
xpath.namespaceContext = MyNamespaceContext()
val extractedValue = xpath.evaluate("",InputSource(StringReader(AboveXMLInStringVariable)), qName)}
class MyNamespaceContext : NamespaceContext {
override fun getNamespaceURI(prefix: String?): String {
println("checking for getnamespace")
if (prefix == null) {
throw IllegalArgumentException("No prefix provided!");
} else if (prefix.equals("mpeg7")) {
return "http://developer.tmsapi.com/files/tva_mpeg7_2008.xsd";
} else {
return XMLConstants.NULL_NS_URI;
}
}
override fun getPrefix(namespaceURI: String?): String {
return ""
}
override fun getPrefixes(namespaceURI: String?): MutableIterator<Any?>? {
return null
}
}
取得エラー。
Caused by: org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 60; The prefix "mpeg7" for element ":GivenName" is not bound.
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:466)
... 38 more
質問: は、私はそれにNameSpaceContextを与えることで試してみましたが、それは、それはそれを使用していないに見えます。提案?
は* *エラーの前に表示されますGETNAMESPACEをチェックしていますか? – kjhughes
いいえ、私はそれらの印刷ステートメントを参照してください、なぜ私はそれを使用していないように見えるthats。 – mdev