Как получить веб-контент WebView в UWP - PullRequest
0 голосов
/ 05 марта 2020

У меня есть WebView для посещения веб-страницы. И я использую код ниже, чтобы получить исходный код html.

    private void Webview_Loaded(object sender, RoutedEventArgs e)
    {
        string htmlStr = LenovoID.GetProfileData();
        webview.Navigate(new Uri(htmlStr));
    }

    private async void Webview_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
    {
        string resulthtml = null;
        try
        {
            resulthtml = await webview.InvokeScriptAsync("eval", new string[] { "document.documentElement.outerHTML;" });
            Debug.WriteLine(".................................html = {0}", resulthtml);
        }
        catch (Exception ex)
        {
        }
    }

Результат html, который является исходным кодом веб-страницы ниже:

.................................html = <userkeyinfo><div xmlns="http://www.w3.org/1999/xhtml" style="color: blue; font-weight: normal; margin-left: -4em;">&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;</div><style xmlns="http://www.w3.org/1999/xhtml">@namespace html url(http://www.w3.org/1999/xhtml); :root {                       font:small Verdana;        font-weight: bold;         padding: 2em;              padding-left:4em;       }                          * {                           display: block;            padding-left: 2em;      }                          html|style {                  display: none;          }                          html|span, html|a {           display: inline;           padding: 0;                font-weight: normal;       text-decoration: none;  }                          html|a[tabindex='0'] {        cursor: pointer;        }                          html|span.block {             display: block;         }                          *[html|hidden],            *[html|hidden] *,          span.block[html|hidden] {     display:none!important; }                          .expand {                     display: block;         }                          .expand:before {              content: '+';              color: red;                position: absolute;        left: -1em;             }  .collapse {                   display: block;         }                          .collapse:before {            content: '-';              color: red;                position: absolute;        left:-1em;              }                         </style><a xmlns="http://www.w3.org/1999/xhtml" tabindex="0" class="collapse" role="treeitem" aria-expanded="true" aria-posinset="1" aria-setsize="1" aria-level="1" style="color: blue; margin-left: -2em; position: relative;">&lt;<span style="color: rgb(153, 0, 0);">userkeyinfo</span>&gt;</a><oneuser><a xmlns="http://www.w3.org/1999/xhtml" tabindex="0" class="collapse" role="treeitem" aria-expanded="true" aria-posinset="1" aria-setsize="3" aria-level="2" style="color: blue; margin-left: -2em; position: relative;">&lt;<span style="color: rgb(153, 0, 0);">oneuser</span>&gt;</a><uid><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="1" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">uid</span>&gt;</a>10041167847<span xmlns="http://www.w3.org/1999/xhtml" style="color: blue;">&lt;/<span style="color: rgb(153, 0, 0);">uid</span>&gt;</span></uid><lastname><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="2" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">lastname</span>&gt;</a>Xue<span xmlns="http://www.w3.org/1999/xhtml" style="color: blue;">&lt;/<span style="color: rgb(153, 0, 0);">lastname</span>&gt;</span></lastname><firstname><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="3" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">firstname</span>&gt;</a>Tom<span xmlns="http://www.w3.org/1999/xhtml" style="color: blue;">&lt;/<span style="color: rgb(153, 0, 0);">firstname</span>&gt;</span></firstname><middlename><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="4" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">middlename</span>/&gt;</a></middlename><gender><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="5" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">gender</span>/&gt;</a></gender><agegroup><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="6" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">agegroup</span>/&gt;</a></agegroup><addresses><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="7" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">addresses</span>/&gt;</a></addresses><tels><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="8" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">tels</span>/&gt;</a></tels><emails><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="9" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">emails</span>/&gt;</a></emails><birthyear><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="10" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">birthyear</span>/&gt;</a></birthyear><birthmonth><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="11" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">birthmonth</span>/&gt;</a></birthmonth><birthday><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="12" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">birthday</span>/&gt;</a></birthday><bloodtype><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="13" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">bloodtype</span>/&gt;</a></bloodtype><career><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="14" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">career</span>/&gt;</a></career><version><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="15" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">version</span>&gt;</a>2<span xmlns="http://www.w3.org/1999/xhtml" style="color: blue;">&lt;/<span style="color: rgb(153, 0, 0);">version</span>&gt;</span></version><registerlang><a xmlns="http://www.w3.org/1999/xhtml" tabindex="-1" role="treeitem" aria-expanded="true" aria-posinset="16" aria-setsize="16" aria-level="3" style="color: blue; margin-left: -2em;">&lt;<span style="color: rgb(153, 0, 0);">registerlang</span>&gt;</a>zh_CN<span xmlns="http://www.w3.org/1999/xhtml" style="color: blue;">&lt;/<span style="color: rgb(153, 0, 0);">registerlang</span>&gt;</span></registerlang><span xmlns="http://www.w3.org/1999/xhtml" class="block" style="color: blue; margin-left: -2em;">&lt;/<span style="color: rgb(153, 0, 0);">oneuser</span>&gt;</span></oneuser><span xmlns="http://www.w3.org/1999/xhtml" class="block" style="color: blue; margin-left: -2em;">&lt;/<span style="color: rgb(153, 0, 0);">userkeyinfo</span>&gt;</span></userkeyinfo>

И если я отформатировал его (используйте этот онлайн-инструмент: https://htmlformatter.com/) и сохраните его в 1. html. Я использую веб-обозреватель, чтобы посетить его, затем он выглядит следующим образом.

enter image description here

Моя цель - извлечь данные из показанного компонента xml, например, получить фамилию Сюэ, имя Том, et c.

Я думаю, что нужно три шага :

  1. Форматировать строку html;
  2. Получить веб-контент (xml строки) из отформатированного html;
  3. Извлечь xml компонент из xml целых строк, например, фамилия Xue

Как это сделать?

1 Ответ

0 голосов
/ 06 марта 2020

Моя цель состоит в том, чтобы извлечь данные из показанного xml компонента

HTML и является также разновидностью XML, которую можно проанализировать как XML. Если вы хотите получить содержимое в теге firstname, вы можете использовать следующий метод:

private async Task ReadXml(StorageFile file)
{
    string htmlContent = await FileIO.ReadTextAsync(file);
    XDocument doc = XDocument.Parse(htmlContent);
    var firstNameList = doc.Root.Descendants(XName.Get("firstname"));
    if (firstNameList.Count() > 0)
    {
        string firstName = firstNameList.First().Value;
        firstName = Regex.Replace(firstName, @"<[^>]*>", "");
        // do other things...
    }
}

XDocument использует Linq для выполнения запроса узла. Кроме того, он также может читать и писать XML документы через XMLDocument .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...