xml에서 값을 추출해야 하는데 태그가 누락되는 상황이 발생했습니다. 자세히 설명하자면, 약 5개의 동일한 요소를 수동으로 계산했지만, 한 형제 노드(형)에는 다른 형과 동일한 요소가 없습니다. 예를 들어 다음 xml을 참조하세요. (이전에 사용해 본 적이 있지만 예시로 사용해 보겠습니다.)
<?xml version="1.0"?>
<DTS:Executable xmlns:DTS="www.microsoft.com/SqlServer/Dts"
DTS:refId="Package"
DTS:CreationDate="7/22/2019 4:18:27 PM"
DTS:CreationName="Microsoft.Package"
DTS:CreatorComputerName="ADMIN-8DF005D47"
DTS:CreatorName="ADMIN-8DF005D47\Administrator"
DTS:DTSID="{8CCA1D42-642A-4932-AAEC-E02175A4B2DB}"
DTS:ExecutableType="Microsoft.Package"
DTS:LastModifiedProductVersion="15.0.2000.68"
DTS:LocaleID="1033"
DTS:ObjectName="HardestNestedWorkflow2"
DTS:PackageType="5"
DTS:VersionBuild="12"
DTS:VersionGUID="{FDD9B190-1A03-4A19-8794-FA86F4F46A93}">
<DTS:Property
DTS:Name="PackageFormatVersion">8</DTS:Property>
<DTS:ConnectionManagers>
<DTS:ConnectionManager
DTS:refId="Package.ConnectionManagers[ADMIN-8DF005D47.AdventureWorks]"
DTS:CreationName="OLEDB"
DTS:DTSID="{A32A68DF-3D53-4057-AF80-1B8D524F82BC}"
DTS:ObjectName="ADMIN-8DF005D47.AdventureWorks">
<DTS:ObjectData>
<DTS:ConnectionManager
DTS:ConnectionString="Data Source=ADMIN-8DF005D47;Initial Catalog=AdventureWorks;Provider=SQLNCLI11;Integrated Security=SSPI;Application Name=SSIS-HardestNestedWorkflow2-{A32A68DF-3D53-4057-AF80-1B8D524F82BC}ADMIN-8DF005D47.AdventureWorks;Auto Translate=False;" />
</DTS:ObjectData>
<!--snipped-->
</DTS:ConnectionManager>
</DTS:ConnectionManagers>
</DTS:Executable>
에프(빅 브라더) 거기엔 남매가 있을 거예요. (그런 요소들을 찾고 있어요)
xmllint
이제 with 를 사용하여 추출하면 xpath
존재하는 형제만 추출됩니다.
XML 코드는 아마도 나쁜 예일 수 있지만 이것이 제가 달성하고 싶은 형식입니다. 왼쪽 열은 큰 형제 노드이고 오른쪽 열은 형제 노드입니다.
DTS:CreationName="OLEDB" {A32A68DF-3D53-4057-AF80-1B8D524F82BC}
DTS:CreationName="Excel" {A32A68DF-3D53-4057-AF80-1B8D524F82BC}
DTS:CreationName="..." <no value>
DTS:CreationName="blah blah" <no value>
xmllint
xpath
코드를 작성하는 방법이 있나요?
- 위와 같은 형식을 만드시겠습니까? 데이터베이스 결과 집합과 같습니다.
awk
ie를 사용하여 선택할 수 있도록 형제 노드와 형제 노드 사이에 추가 문자를 추가합니다.DTS:CreationName="OLEDB"%{A32A68DF-3D53-4057-AF80-1B8D524F82BC}
- 공백을 표시하지 말고
NULL
형제가 존재하지 않는다는 사실을 상기시켜주는 문자를 입력하세요. 형제 노드가 2개 이상인 경우 동일한 형제 노드를 나란히 배치합니다.
형제 1% 형제 자매 1
형제 1% 형제 자매 2
정말 도움이 됩니다. 더 많은 것을 배우기를 기대합니다 xmllint
!