JavaScript 및 Regex를 사용하여 파일에서 XML 태그를 가져 오는 가장 효율적인 방법

테레사 피터스

엔터프라이즈 애플리케이션을 위해 iOS 장치 및 시뮬레이터에서 좀 더 고급 자동화를 수행하고 있습니다. 자동화는 브라우저없는 자바 스크립트로 작성됩니다. 방법 중 하나는 시뮬레이터가 아닌 장치에서 작동하므로 해결 방법을 코딩해야합니다. 궁금하다면 UIATarget.localTarget (). frontMostApp (). preferencesValueForKey (key)입니다.

우리가해야 할 일은 디스크의 plist 파일에서 서버 경로 (다양 함)를 읽는 것입니다. 시뮬레이터의 해결 방법으로 다음 줄을 사용하여 환경 설정이 포함 된 plist 파일을 찾았습니다.

// Get the alias of the user who's logged in
var result = UIATarget.localTarget().host().performTaskWithPathArgumentsTimeout("/usr/bin/whoami", [], 5).stdout;

// Remove the extra newline at the end of the alias we got
result = result.replace('\n',"");

// Find the location of the plist containing the server info
result = UIATarget.localTarget().host().performTaskWithPathArgumentsTimeout("/usr/bin/find", ["/Users/"+result+"/Library/Application Support/iPhone Simulator", "-name", "redacted.plist"], 100);

// For some reason we need a delay here
UIATarget.localTarget().delay(.5);

// Results are returned in a single string separated by newline characters, so we can split it into an array
// This array contains all of the folders which have the plist file under the Simulator directory
var plistLocations = result.stdout.split("\n");

...

// For this example, let's just assume we want slot 0 here to save time
var plistBinaryLocation = plistLocations[0];
var plistXMLLocation =  plistLocations[i] + ".xml";
result = UIATarget.localTarget().host().performTaskWithPathArgumentsTimeout("/usr/bin/plutil", ["-convert","xml1", plistBinaryLocation,"-o", plistXMLLocation], 100);

여기에서 내용을 얻는 가장 좋은 방법은 파일을 cat 또는 grep하는 것입니다. 디스크에서 직접 파일을 읽을 수 없기 때문입니다. 그러나 구문을 내리는 데 문제가 있습니다. 내가 읽고있는 plist 파일의 편집 된 스 니펫은 다음과 같습니다.

<key>server_url</key>
<string>http://pathToServer</string>

파일에는 server_url 키가 고유 한 키 / 문자열 쌍이 많이 있습니다. 이상적으로는 룩 백과 같은 일을하고 싶지만 JavaScript가이를 지원하지 않는 것 같기 때문에 파일에서 쌍을 가져 와서 조금 후에 깎아 내리겠다고 생각했습니다.

다음과 같이 키를 검색 할 수 있습니다.

// This line works
var expression = new RegExp(escapeRegExp("<key>server_url</key>"));

if(result.stdout.match(expression))
{
    UIALogger.logMessage("FOUND IT!!!");
}
else
{
    UIALogger.logMessage("NOPE :(");
}

escapeRegExp 메소드는 다음과 같습니다.

function escapeRegExp(str) 
{
    var result =  str.replace(/([()[{*+.$^\\|?])/g, '\\$1');

    UIALogger.logMessage("NEW STRING: " + result);
    return result;
}

또한이 줄은 값을 반환하지만 잘못된 줄을 가져옵니다.

var expression = new RegExp(escapeRegExp("<string>(.*?)</string>"));

그러나 두 가지를 합치면 (Regex 구문) 터미널에서는 작동하지만 코드에서는 작동하지 않습니다.

var expression = new RegExp(escapeRegExp("<key>server_url</key>[\s]*<string>(.*?)</string>"));

내가 무엇을 놓치고 있습니까? 나는 또한 운없이 grep과 egrep을 시도했습니다.

조나단 펜

여기에서 JavaScript 코드에서 정규식을 사용하는 데 영향을 미치는 두 가지 문제가 있습니다.

  • 첫째, 전체 정규식 표현식 문자열을 이스케이프합니다. 즉, 캡처 (.*?)및 공백 무시 [\s]*도 이스케이프되고 예상 한 방식으로 평가되지 않습니다. XML 부분을 이스케이프하고이를 이스케이프하지 않고 정규식 부분을 추가해야합니다.
  • 둘째, 공백을 무시하는 부분 [\s]*은 JavaScript의 일반 문자열 이스케이프 규칙의 희생양이되고 있습니다. "\ s"는 출력에서 ​​"s"로 바뀝니다. 정규식을 생성하기 위해 전달하는 문자열에서 "\ s"로 유지되도록 해당 백 슬래시를 "\ s"로 이스케이프해야합니다.

UI 자동화 엔진 자체에서 확인한 작업 스크립트를 작성했습니다. 예상 URL을 추출하여 인쇄해야합니다.

var testString = "" +
"<plistExample>\n" +
"   <key>dont-find-me</key>\n" +
"   <string>bad value</string>\n" +
"   <key>server_url</key>\n" +
"   <string>http://server_url</string>\n" +
"</plistExample>";

function escapeRegExp(str) 
{
    var result =  str.replace(/([()[{*+.$^\\|?])/g, '\\$1');

    UIALogger.logMessage("NEW STRING: " + result);
    return result;
}

var strExp = escapeRegExp("<key>server_url</key>") + "[\\s]*" + escapeRegExp("<string>") + "(.*)" + escapeRegExp("</string>");

UIALogger.logMessage("Expression escaping only the xml parts:" + strExp);

var exp = new RegExp(strExp);
var match = testString.match(exp);

UIALogger.logMessage("Match: " + match[1]);

하지만 정규식에서 이스케이프해야하는 유일한 것은 XML 닫는 태그의 슬래시뿐이라는 점을 지적해야합니다. 즉, escapeRegExp()함수 가 필요하지 않으며 다음 과 같이 원하는 표현식을 작성할 수 있습니다.

var exp = new RegExp("<key>server_url<\/key>[\\s]*<string>(.*)<\/string>");

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

여러 XML 파일에서 두 노드를 읽는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

neo4j에서 여러 csv를 가져 오는 효율적인 방법

분류에서Dev

Doctrine MongoBundle : 28k 문서를 가져 오는 가장 효율적인 방법

분류에서Dev

grails에서 Excel 가져 오기를 구현하는 효율적인 방법

분류에서Dev

Django 1.9 및 Postgres 9.5에 태그를 저장하기위한 모델을 만드는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

삭제 된 문서를 가져 오는 효율적인 방법

분류에서Dev

AJAX를 사용하는 가장 효율적인 검색 방법?

분류에서Dev

toString () JAVA를 사용하는 가장 효율적인 방법

분류에서Dev

rails ahoy 및 groupdate gem을 활용하여 일일 활성 사용자를 계산하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

xml 파일에서 태그 값 가져 오기 및 배치 스크립트를 사용하여 CSV 파일에 결과 저장

분류에서Dev

웹 사이트에서 비디오를 스트리밍하는 가장 비용 효율적인 방법

분류에서Dev

PHP에서 DOM 파서를 사용하여 xml 문서의 태그 및 내용 가져 오기

분류에서Dev

Scala를 사용하여 XML 파일의 모든 하위 및 하위 하위 항목을 가져 오는 방법

분류에서Dev

Javascript를 사용하여 XML 키 / 값의 .text에서 전체 값 (추가 태그 포함)을 가져 오는 방법

분류에서Dev

Office Open XML 문서를 복제하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

Javascript에서 GroupBy를 구현하는 가장 효율적인 방법은 무엇입니까?

분류에서Dev

Javascript를 사용하여 HTML 페이지의 <SCRIPT> 태그에서 특정 데이터를 가져 오는 방법

분류에서Dev

JavaScript를 사용하여 div 태그 내에서 img 요소를 가져 오는 방법은 무엇입니까?

분류에서Dev

jquery 및 javascript를 사용하여 태그 이름 가져 오기

분류에서Dev

XPath Selenium 및 Python을 사용하여 <p> 태그에서 텍스트를 가져 오는 방법

분류에서Dev

라즈베리 파이에 파이썬을 사용하여 센서로부터 데이터를 저장하는 가장 효율적인 방법

분류에서Dev

코스를 SQL 테이블에 저장하는 가장 효율적인 방법

분류에서Dev

xml 파일에서 값을 가져온 다음 php를 사용하여 인쇄하는 방법

분류에서Dev

xml 파일에서 값을 가져온 다음 php를 사용하여 인쇄하는 방법

분류에서Dev

자바 : 메서드 인수를 변경하는 가장 효율적인 방법

분류에서Dev

ArrayList에서 이미지를 처리하는 가장 효율적인 방법

분류에서Dev

xml 태그로 들어오는 xml 문서를 가져 와서 문서에서 사용하는 방법

분류에서Dev

Excel에서 인덱스 일치 문제를 최적화하는 가장 효율적인 방법

분류에서Dev

탄력적 검색을 사용하여 문서를 Json으로 저장 및 가져 오는 방법

Related 관련 기사

  1. 1

    여러 XML 파일에서 두 노드를 읽는 가장 효율적인 방법은 무엇입니까?

  2. 2

    neo4j에서 여러 csv를 가져 오는 효율적인 방법

  3. 3

    Doctrine MongoBundle : 28k 문서를 가져 오는 가장 효율적인 방법

  4. 4

    grails에서 Excel 가져 오기를 구현하는 효율적인 방법

  5. 5

    Django 1.9 및 Postgres 9.5에 태그를 저장하기위한 모델을 만드는 가장 효율적인 방법은 무엇입니까?

  6. 6

    삭제 된 문서를 가져 오는 효율적인 방법

  7. 7

    AJAX를 사용하는 가장 효율적인 검색 방법?

  8. 8

    toString () JAVA를 사용하는 가장 효율적인 방법

  9. 9

    rails ahoy 및 groupdate gem을 활용하여 일일 활성 사용자를 계산하는 가장 효율적인 방법은 무엇입니까?

  10. 10

    xml 파일에서 태그 값 가져 오기 및 배치 스크립트를 사용하여 CSV 파일에 결과 저장

  11. 11

    웹 사이트에서 비디오를 스트리밍하는 가장 비용 효율적인 방법

  12. 12

    PHP에서 DOM 파서를 사용하여 xml 문서의 태그 및 내용 가져 오기

  13. 13

    Scala를 사용하여 XML 파일의 모든 하위 및 하위 하위 항목을 가져 오는 방법

  14. 14

    Javascript를 사용하여 XML 키 / 값의 .text에서 전체 값 (추가 태그 포함)을 가져 오는 방법

  15. 15

    Office Open XML 문서를 복제하는 가장 효율적인 방법은 무엇입니까?

  16. 16

    Javascript에서 GroupBy를 구현하는 가장 효율적인 방법은 무엇입니까?

  17. 17

    Javascript를 사용하여 HTML 페이지의 <SCRIPT> 태그에서 특정 데이터를 가져 오는 방법

  18. 18

    JavaScript를 사용하여 div 태그 내에서 img 요소를 가져 오는 방법은 무엇입니까?

  19. 19

    jquery 및 javascript를 사용하여 태그 이름 가져 오기

  20. 20

    XPath Selenium 및 Python을 사용하여 <p> 태그에서 텍스트를 가져 오는 방법

  21. 21

    라즈베리 파이에 파이썬을 사용하여 센서로부터 데이터를 저장하는 가장 효율적인 방법

  22. 22

    코스를 SQL 테이블에 저장하는 가장 효율적인 방법

  23. 23

    xml 파일에서 값을 가져온 다음 php를 사용하여 인쇄하는 방법

  24. 24

    xml 파일에서 값을 가져온 다음 php를 사용하여 인쇄하는 방법

  25. 25

    자바 : 메서드 인수를 변경하는 가장 효율적인 방법

  26. 26

    ArrayList에서 이미지를 처리하는 가장 효율적인 방법

  27. 27

    xml 태그로 들어오는 xml 문서를 가져 와서 문서에서 사용하는 방법

  28. 28

    Excel에서 인덱스 일치 문제를 최적화하는 가장 효율적인 방법

  29. 29

    탄력적 검색을 사용하여 문서를 Json으로 저장 및 가져 오는 방법

뜨겁다태그

보관