| Crates.io | x-diff-rs |
| lib.rs | x-diff-rs |
| version | 0.4.1 |
| created_at | 2025-03-21 10:42:28.400133+00 |
| updated_at | 2025-04-09 16:45:16.487145+00 |
| description | A library to compare XML semantically |
| homepage | |
| repository | https://github.com/ndtoan96/x-diff-rs |
| max_upload_size | |
| id | 1600364 |
| size | 45,823 |
A library to compare XML files unorderedly.
This library implements the X-Diff algorithm from paper X-Diff: An Effective Change Detection Algorithm for XML Documents.
use x_diff_rs::{
diff,
tree::XTree,
};
fn main() {
let text1 = r#"
<Profile>
<Customer>
<PersonName NameType="Default">
<NameTitle>Mr.</NameTitle>
<GivenName>George</GivenName>
<MiddleName>A.</MiddleName>
<SurName>Smith</SurName>
</PersonName>
<TelephoneInfo PhoneTech="Voice" PhoneUse="Work" >
<Telephone> <AreaCityCode>206</AreaCityCode>
<PhoneNumber>813-8698</PhoneNumber>
</Telephone>
</TelephoneInfo>
<PaymentForm>
...
</PaymentForm>
<Address>
<StreetNmbr POBox="4321-01">From hell</StreetNmbr>
<BldgRoom>Suite 800</BldgRoom>
<CityName>Seattle</CityName>
<StateProv PostalCode="98108">WA</StateProv>
<CountryName>USA</CountryName>
</Address>
<Address>
<StreetNmbr POBox="4321-01">1200 Yakima St</StreetNmbr>
<BldgRoom>Suite 800</BldgRoom>
<CityName>Seattle</CityName>
<StateProv PostalCode="98108">WA</StateProv>
<CountryName>USA</CountryName>
</Address>
</Customer>
</Profile>
"#;
let text2 = r#"
<Profile>
<Customer>
<PersonName NameType="Default">
<NameTitle>Mr.</NameTitle>
<GivenName>George</GivenName>
<MiddleName>A.</MiddleName>
<SurName>Smith</SurName>
</PersonName>
<TelephoneInfo PhoneTech="Voice" PhoneUse="Work" >
<Telephone> <AreaCityCode>206</AreaCityCode>
<PhoneNumber>813-8698</PhoneNumber>
</Telephone>
</TelephoneInfo>
<Address>
<StreetNmbr POBox="4321-01">From hell</StreetNmbr>
<BldgRoom>Suite 800</BldgRoom>
<CityName>Seattle</CityName>
<StateProv PostalCode="98108">WA</StateProv>
<CountryName>USA</CountryName>
</Address>
<Address>
<StreetNmbr POBox="1234-01">1200 Yakima St</StreetNmbr>
<BldgRoom>Suite 800</BldgRoom>
<CityName>Paris</CityName>
<StateProv PostalCode="98108">WA</StateProv>
<CountryName>USA</CountryName>
</Address>
<Status>Single</Status>
</Customer>
</Profile>
"#;
let tree1 = XTree::parse(&text1).unwrap();
let tree2 = XTree::parse(&text2).unwrap();
let difference = diff(&tree1, &tree2);
for d in difference {
println!("{d}");
}
}