[英]Kotlin Multiplatform/JS Unresolved reference Document.evaluate()
Context: Kotlin Multiplatform JavaScript .上下文: Kotlin 多平台 JavaScript 。
I'm trying to use a Document.evaluate() but getting Unresolved reference: evaluate
and Unresolved reference: XPathResult
.我正在尝试使用Document.evaluate()但得到Unresolved reference: evaluate
和Unresolved reference: XPathResult
。
import org.w3c.dom.Document
import org.w3c.dom.parsing.DOMParser
object JavascriptTest {
// language=HTML
private val html = """
<body>
<div>
<a class="button" href="http://exaple.com">Example</a>
</div>
</body>
""".trimIndent()
fun parseXpath() {
val parser = DOMParser()
val document: Document = parser.parseFromString(html, "text/html")
val xpath = "//div/a[contains(@class, \"button\")]"
document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
}
}
build.gradle.kts build.gradle.kts
kotlin {
js(IR) {
useCommonJs()
browser {}
binaries.executable()
}
sourceSets {
val jsTest by getting
}
As far as I know there is no bindings for XPathEvaluator
interface out of the box right now.据我所知,目前没有开箱即用的XPathEvaluator
接口绑定。 But you could add them by yourself using asDynamic
:但是您可以使用asDynamic
自己添加它们:
val XPathResult = window.asDynamic().XPathResult
fun Document.evaluate(
xpathExpression: String,
contextNode: Node,
namespaceResolver: Any?,
resultType: Any,
result: Any?
): dynamic =
asDynamic().evaluate(xpathExpression, contextNode, namespaceResolver, resultType, result)
As an alternative to @Evgeny solution, you can also use this class which is marked as external
as suggested in Use JavaScript code from Kotlin作为@Evgeny 解决方案的替代方案,您还可以使用此标记为external
的 class,如使用来自 Kotlin 的代码 JavaScript中所建议的
external class XPathResult {
companion object {
val ANY_TYPE: Int
val NUMBER_TYPE: Int
val ANY_UNORDERED_NODE_TYPE: Int
val BOOLEAN_TYPE: Int
val FIRST_ORDERED_NODE_TYPE: Int
val ORDERED_NODE_ITERATOR_TYPE: Int
val ORDERED_NODE_SNAPSHOT_TYPE: Int
val STRING_TYPE: Int
val UNORDERED_NODE_ITERATOR_TYPE: Int
val UNORDERED_NODE_SNAPSHOT_TYPE: Int
}
// Instance properties:
val booleanValue: Boolean?
val invalidIteratorState: Boolean
val numberValue: Double?
val resultType: Int
val singleNodeValue: dynamic
val snapshotLength: Int
val stringValue: String?
// Instance methods:
fun iterateNext(): Node?
fun snapshotItem(index: Int): Node?
}
fun Document.evaluate(
xpathExpression: String,
contextNode: Node,
namespaceResolver: Any?,
resultType: Any,
result: Any?,
): XPathResult =
asDynamic().evaluate(
xpathExpression,
contextNode,
namespaceResolver,
resultType,
result
) as XPathResult
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.