Как получить подстроки из Xpath с помощью C #? - PullRequest
1 голос
/ 27 сентября 2019

У меня есть свойство Xpath внутри файла JSON, и я хотел бы получить две подстроки из этого Xpath, чтобы помочь этим подстрокам в две переменные.

Объект JSON выглядит следующим образом;

    {
        'selectGateway':'0',
        'waitingTime':'20000',
        'status':'200',
        'correlationID':'1',
        'matchString':[{'xpath':'/whitelist/locations/location/var-fields/var-field[@key="whitelist-entry" and @value="8.0440147AA44A80"]','value':''}],
        'matchInteger':[],
        'matchSortedList':[]

    }

Это моя попытка, пока она работает правильно, я просто ищу способ сделать это более динамично и лучше, если это возможно.

int firstStringPositionForKey = matchString[index].xpath.IndexOf("@key=\"");
int secondStringPositionForKey = matchString[index].xpath.IndexOf("\" and");
string betweenStringForKey = matchString[index].xpath.Substring(firstStringPositionForKey+6, secondStringPositionForKey-firstStringPositionForKey-6);

int firstStringPositionForValue = matchString[index].xpath.IndexOf("@value=\"");
int secondStringPositionForValue = matchString[index].xpath.IndexOf("\"]");
string betweenStringForValue = matchString[index].xpath.Substring(firstStringPositionForValue+8, secondStringPositionForValue-firstStringPositionForValue-8);

Я ожидаювывод должен быть таким:

key is : whitelist-entry
value is : 8.0440147AA44A80

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Я полагаю, что вы получаете значение xPath в matchString[index].xpath, поэтому вот решение

//Test is nothing but your xPath
string test = "/whitelist/locations/location/var-fields/var-field[@key=\"whitelist-entry\" and @value=\"8.0440147AA44A80\"]";

//Split your string by '/' and get last element from it.
string lastElement = test.Split('/').LastOrDefault();

//Use regex to get text present in "<text>"
var matches = new Regex("\".*?\"").Matches(lastElement);

//Remove double quotes         
var key = matches[0].ToString().Trim('\"');
var @value = matches[1].ToString().Trim('\"');;

//Print key and value   
Console.WriteLine("Key is: ${key}");
Console.WriteLine("Value is: ${value}");

Вывод:

Key is: whitelist-entry
Value is: 8.0440147AA44A80

.net fiddle

0 голосов
/ 27 сентября 2019

Использование Regex ( Ссылка на формулу )

var obj = JObject.Parse("your_json");
var xpath = ((JArray)obj["matchString"])[0]["xpath"].Value<string>();

string pattern = "(?<=key=\")(.*?)(?=\").*(?<=value=\")(.*?)(?=\")";
var match = new Regex(pattern).Match(xpath);

string key = match.Groups[1].Value;   
string value = match.Groups[2].Value;
...