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;