동일한 스키마를 모두 준수하는 XML 묶음이 있습니다. 일괄 편집을 원하는 특정 요소는 각 XML 파일마다 정확히 한 번 발생하며 각 파일에 동일한 xPath가 있습니다.XML 파일을 일괄 업데이트하는 방법
e.g. /Valid/HeaderInfo/SoftwareID
내가 값을 대체 할 수 있도록이 특정 요소에 대해 (내가 더 정확하게 노드의 텍스트 값이라고 생각) 스크립트/프로 시저를 작성하고 내 모든 XML 파일에 해당 업데이트를 수행 할 폴더 그룹의 폴더에 저장합니다. 예를 들어 지금 당장은 다음과 같습니다
<SoftwareID>12451245</SoftwareID>
내가 대신
<SoftwareID>53623745</SoftwareID>
되고 싶어요.
저는 프로그래밍의 세계에서 시작하고 있으며 일반적으로 XML 데이터에 대해 배우기 시작했습니다. 시작하는 방법에 대한 기본적인 정보가 필요합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나는 Altova XMLSpy를 가지고 있으며 스크립팅 구성 요소가 있다는 것을 알고 있습니다. 그러나 특정 프로그래밍 언어 (현재 Visual Basic을 배우고 있음)에서이 작업을 수행하는 것이 더 적절합니까 아니면 이러한 유형의 일괄 업데이트를 수행하기 위해 존재하는 다른 소프트웨어가 있습니까?
나를 올바른 방향으로 인도 할 수있는 정보는 아주 좋습니다.
감사합니다.
업데이트 (06/26/13)
FilingSoftwareId에 XPath를 (업데이트 된 요소 이름은) 실제로 : ValidFiling는 XML 문서의 루트 인으로
ValidFiling/FilingHeader/FilingSoftwareId
. 당신이 제공하고 업데이트 한 것을 사용했지만, 결과는 Altova XMLSpy에서 XSL 변환을 위해이 XSL 파일을 선택할 때 원래의 XML 파일과 중복됩니다.
두 번째 포괄 템플릿이 문서에 적용될 때 FilingSoftwareID에 대한 업데이트가 원래 값으로 대체 될 가능성이 있습니까?
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="yes" indent="yes" method="xml"/>
<xsl:template match="/ValidFiling/FilingHeader/FilingSoftwareId">
<FilingSoftwareId>
<xsl:text>243523452345</xsl:text>
</FilingSoftwareId>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
다시 한번 감사드립니다!
감사합니다. Kevin! 상세한 답변에 감사드립니다. 이 XSL을 사용하면 내 XML 파일은 여전히 원래 스키마에 대한 유효성을 유지합니다. (물론 SoftwareID에 대한 새로운 가치가 유효하다고 가정합니다. 아직 테스트하지는 않았지만 스키마에있는 다른 모든 요소를 통합하여 "완전하게"만들 필요가 있습니까? 따라서 모든 프로그래밍 언어가 XML과 "대화"하여 조작 할 수 있습니까? 또 다른 문제는 가능한 것으로 생각되지만, 새로운 SoftwareID를 각 XML에 +1만큼 증가하는 순차 번호로 설정하고 싶다면 그렇게 할 수 있을까요? – smk081
스키마 부분의 경우 스키마를 XSL에 추가하여 인식, 처리 및 출력되도록합니다. 다른 것을 추가 할 필요는 없으며, @ * | node와 일치하는 템플릿은 기본적인 catch-all이며 명시 적으로 일치하지 않는 모든 것을 일치시킵니다. VB에서는 XSLT 변환기를 호출 할 수있는 언어를 사용할 수 있습니다. 코드에서 XSLCompiledTransform을 사용할 가능성이 높습니다. 예, 변환에 전달 된 매개 변수 (예 : SoftwareID)를 추가하고 XSL에서 해당 매개 변수를 사용할 수 있습니다. –
그리고 이유는 ... XML을 가장 안전하게/최상의 방법으로 조작하기 위해 항상 XML을 인식하는 방법을 사용합니다. 물론 문제를보고 Regex 또는 문자열 조작을 작성하려고 시도 할 수도 있지만 XML을 조작하는 올바른 방법은 아닙니다. XSL을 사용하거나 프로그래밍 방식으로 DOM을 사용해야합니다. Altova XMLSpy를 사용하여 하나의 XML에서 위의 내용을 테스트하거나 전체 디렉토리를 처리하는 데 사용할 수도 있습니다. –