Har följande kod, där jag har en "SearchString" som innehåller sökvärde. Funktionen laddar sen resp xml dokument och ska leta efter sökvärdet, men här vill jag att den ska utesluta html taggar i sin sökning, säg att SearchString innehåller ex "img", då vill jag inte att den ska få en träff på en img tagg som finns i xmlen? Ett sätt skulle kunna vara att göra en andra genomgång av (de potentiella) sökträffarna för att sålla bort falska träffar Får det inte att funka, söker jag på tex img så får den träff på följande i xml filen: Hur ser den ursprungliga xml:en ut? Jag förutsatte helt sonika att pagecontent-taggen innehåller ett fullständigt html-dokument men så är kanske inte fallet? Har uppdaterat koden ovan och får nu ingen träff på img om jag söker i samma xmlXML Load + sök?
Dim xm As XmlDocument = New XmlDocument()
Dim list As String = "//pagecontent[contains(translate(.,'abcdefghijklmnopqrstuvwxyzåäö', 'ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ'),'" & UCase(SearchString) & "')]"
xm.Load(file)
Dim Xn As XmlNodeList = xm.SelectNodes(list)
Dim xNode As XmlNode
Dim xmldoc As New XmlDocument()
Dim decl As XmlDeclaration = xmldoc.CreateXmlDeclaration("1.0", "utf-8", "")
xmldoc.InsertBefore(decl, xmldoc.DocumentElement)
Dim RootNode As XmlElement
RootNode = xmldoc.CreateElement("items")
For Each xNode In Xn
RootNode.AppendChild(xmldoc.ImportNode(xNode, True))
Next
Sv: XML Load + sök?
Dim xm As XmlDocument = New XmlDocument()
Dim list As String = "//pagecontent[contains(translate(.,'abcdefghijklmnopqrstuvwxyzåäö', 'ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ'),'" & UCase(SearchString) & "')]"
xm.Load(file)
Dim Xn As XmlNodeList = xm.SelectNodes(list)
Dim xNode As XmlNode
Dim xmldoc As New XmlDocument()
Dim decl As XmlDeclaration = xmldoc.CreateXmlDeclaration("1.0", "utf-8", "")
xmldoc.InsertBefore(decl, xmldoc.DocumentElement)
Dim RootNode As XmlElement
RootNode = xmldoc.CreateElement("items")
For Each xNode In Xn
If (IsInnerTextHit(xNode, SearchString)) Then
RootNode.AppendChild(xmldoc.ImportNode(xNode, True))
End If
Next
Ändra denna efter behov (t.ex. om du vill att en sökning på "img" ska kunna få träff på <table title="simglasögon">).
Imports mshtml ' Kräver en referens till Microsoft.mshtml i projektet
' Kollar om en sökterm (needle) finns i den för användaren "synliga" delen av ett htmldokument
' Sökningen ignorerar alltså t.ex. <meta>-taggar, alt/title-texter, texter på knappar m.m.
Private Function IsInnerTextHit(haystack As XmlNode, needle As String) As Boolean
' TODO: Validering, felhantering
Dim htmlDocument As IHTMLDocument2 = New HTMLDocument()
htmlDocument.write(haystack.InnerText)
Return htmlDocument.body.innerText.Contains(needle)
End Function
Edit: Bytte till haystack.InnerText istället för OuterXml
Sv:XML Load + sök?
<![CDATA[<img src="../images/dot_service.png" />]]>Sv: XML Load + sök?
Sv:XML Load + sök?
<?xml version="1.0" encoding="utf-8" ?>
<items>
<pagecontent id="quote">
<head>Rubrik</head>
<text>
text text bla bla bla
<![CDATA[<img src="../images/print.png" />]]>
</text>
</pagecontent>
</items>Sv: XML Load + sök?