x_diff_rs/lib.rs
1/*!
2A library to compare XML files unorderedly.
3
4This library implements the X-Diff algorithm from paper [X-Diff: An Effective Change Detection Algorithm for XML Documents](https://pages.cs.wisc.edu/~yuanwang/papers/xdiff.pdf).
5
6## Example
7
8```rust
9use x_diff_rs::{
10 diff::diff,
11 tree::XTree,
12};
13
14let text1 = r#"
15<Profile>
16 <Customer>
17 <PersonName NameType="Default">
18 <NameTitle>Mr.</NameTitle>
19 <GivenName>George</GivenName>
20 <MiddleName>A.</MiddleName>
21 <SurName>Smith</SurName>
22 </PersonName>
23 <TelephoneInfo PhoneTech="Voice" PhoneUse="Work" >
24 <Telephone> <AreaCityCode>206</AreaCityCode>
25 <PhoneNumber>813-8698</PhoneNumber>
26 </Telephone>
27 </TelephoneInfo>
28 <PaymentForm>
29 ...
30 </PaymentForm>
31 <Address>
32 <StreetNmbr POBox="4321-01">From hell</StreetNmbr>
33 <BldgRoom>Suite 800</BldgRoom>
34 <CityName>Seattle</CityName>
35 <StateProv PostalCode="98108">WA</StateProv>
36 <CountryName>USA</CountryName>
37 </Address>
38 <Address>
39 <StreetNmbr POBox="4321-01">1200 Yakima St</StreetNmbr>
40 <BldgRoom>Suite 800</BldgRoom>
41 <CityName>Seattle</CityName>
42 <StateProv PostalCode="98108">WA</StateProv>
43 <CountryName>USA</CountryName>
44 </Address>
45 </Customer>
46</Profile>
47 "#;
48
49let text2 = r#"
50<Profile>
51 <Customer>
52 <PersonName NameType="Default">
53 <NameTitle>Mr.</NameTitle>
54 <GivenName>George</GivenName>
55 <MiddleName>A.</MiddleName>
56 <SurName>Smith</SurName>
57 </PersonName>
58 <TelephoneInfo PhoneTech="Voice" PhoneUse="Work" >
59 <Telephone> <AreaCityCode>206</AreaCityCode>
60 <PhoneNumber>813-8698</PhoneNumber>
61 </Telephone>
62 </TelephoneInfo>
63 <Address>
64 <StreetNmbr POBox="4321-01">From hell</StreetNmbr>
65 <BldgRoom>Suite 800</BldgRoom>
66 <CityName>Seattle</CityName>
67 <StateProv PostalCode="98108">WA</StateProv>
68 <CountryName>USA</CountryName>
69 </Address>
70 <Address>
71 <StreetNmbr POBox="1234-01">1200 Yakima St</StreetNmbr>
72 <BldgRoom>Suite 800</BldgRoom>
73 <CityName>Paris</CityName>
74 <StateProv PostalCode="98108">WA</StateProv>
75 <CountryName>USA</CountryName>
76 </Address>
77 <Status>Single</Status>
78 </Customer>
79</Profile>
80"#;
81let tree1 = XTree::parse(&text1).unwrap();
82let tree2 = XTree::parse(&text2).unwrap();
83let difference = diff(&tree1, &tree2);
84for d in difference {
85 println!("{d}");
86}
87```
88*/
89
90/// XML parsing and tree operations.
91pub mod tree;
92
93/// Diff calculation
94pub mod diff;